def reverseKGroup(self, head, k): """ :type head: ListNode :type k: int :rtype: ListNode """ dummy = ListNode(0) dummy.next = head prev, node = dummy, head while node: src, dst = node, node i = 1 while i < k and dst: dst = dst.next i += 1 # print(i,k) if not dst: break next = dst.next sprev, s = None, src while s and id(s) != id(next): snext = s.next s.next = sprev sprev = s s = snext prev.next = dst src.next = next prev = src node = next return dummy.next
def rotateRight(self,head, k): """ :type head: ListNode :type k: int :rtype: ListNode """ # 边界条件未考虑 if not head: return head n = head lens = 0 while n: lens += 1 n = n.next duumy = ListNode(0) duumy.next = head e = lens - (k % lens) if k % lens: s = 1 n = head while s < e: n = n.next s += 1 duumy.next = n.next end = n.next while end.next: end = end.next end.next = head n.next = None return duumy.next
def mergeTwoLists(self, l1, l2): """ :type l1: ListNode :type l2: ListNode :rtype: ListNode """ node1, node2 = l1, l2 dummy = ListNode(0) prev = dummy while node1 and node2: if node1.val < node2.val: prev.next = node1 prev = node1 node1 = node1.next else: prev.next = node2 prev = node2 node2 = node2.next while node1: prev.next = node1 prev = node1 node1 = node1.next while node2: prev.next = node2 prev = node2 node2 = node2.next return dummy.next
def swapPairs(self, head): """ :type head: ListNode :rtype: ListNode """ dummy = ListNode(0) dummy.next = head prev, node = dummy, head while node and node.next: next = node.next node.next = next.next prev.next = next next.next = node prev = node node = node.next return dummy.next
class Solution: def swapPairs(self, head): """ :type head: ListNode :rtype: ListNode """ dummy = ListNode(0) dummy.next = head prev, node = dummy, head while node and node.next: next = node.next node.next = next.next prev.next = next next.next = node prev = node node = node.next return dummy.next if __name__ == "__main__": s = Solution() head1 = ListNode(1, ListNode(2, ListNode(3, ListNode(4)))) n = s.swapPairs(head1) while n: print(n) n = n.next
from list.node import ListNode class Solution: def isPalindrome(self, head): """ :type head: ListNode :rtype: bool """ s = [] n = head while n: s.append(n.val) n = n.next n = head while n: if s.pop() != n.val: return False n = n.next return True if __name__ == "__main__": head = ListNode(1, ListNode(2, ListNode(1))) print(Solution().isPalindrome(head))
while i < k and dst: dst = dst.next i += 1 # print(i,k) if not dst: break next = dst.next sprev, s = None, src while s and id(s) != id(next): snext = s.next s.next = sprev sprev = s s = snext prev.next = dst src.next = next prev = src node = next return dummy.next if __name__ == "__main__": s = Solution() head1 = ListNode(1, ListNode(2, ListNode(3, ListNode(4, ListNode(5))))) n = s.reverseKGroup(head1, 3) while n: print(n) n = n.next
tail = tmp_for_tail tmp_for_tail = tmp_for_tail.next _len += 1 # 找到新的 head new_head = head adv = _len - (k % _len) for i in range(adv): new_head = new_head.next if not new_head: # 循环场景 new_head = head # 找出 new_head 之前的点,并将其置为新的 tail tmp = head if tmp == new_head: return new_head while tmp: if tmp.next == new_head: tmp.next = None break tmp = tmp.next tail.next = head return new_head if __name__ == '__main__': # head = ListNode.create(1, 2) # head = ListNode.create(1, 2, 3, 4, 5) head = ListNode.create(0, 1, 2) print(ListNode.toArray(Solution().rotateRight(head, 4)))
if node1.val < node2.val: prev.next = node1 prev = node1 node1 = node1.next else: prev.next = node2 prev = node2 node2 = node2.next while node1: prev.next = node1 prev = node1 node1 = node1.next while node2: prev.next = node2 prev = node2 node2 = node2.next return dummy.next if __name__ == "__main__": s = Solution() head1 = ListNode(2, ListNode(4)) head2 = ListNode(4, ListNode(5, ListNode(6))) n = s.mergeTwoLists(head1, head2) while n: print(n) n = n.next