def rotateRight(self, head: ListNode, k: int) -> ListNode: if head is None or k == 0: return head sentinel = ListNode(-1) sentinel.next = head pre = sentinel post = sentinel length = 0 while head is not None: length += 1 head = head.next k = k % length for i in range(0, k): post = post.next while post.next is not None: post = post.next pre = pre.next post.next = sentinel.next sentinel.next = pre.next pre.next = None return sentinel.next
def reverseListForHeadInsert(self, head: ListNode) -> ListNode: guard = ListNode(-1) while head is not None: temp = head.next head.next = guard.next guard.next = head head = temp return guard.next
def recursionFunc(self, node: ListNode) -> ListNode: if node.next is None: return node head = self.recursionFunc(node.next) node.next.next = node node.next = None return head
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: guard = ListNode(-1) guard.next = head pre, curr = guard, guard for i in range(0, n): if curr is None: return None curr = curr.next while curr.next is not None: pre = pre.next curr = curr.next pre.next = pre.next.next return guard.next
def rotateRight(self, head: ListNode, k: int) -> ListNode: length = 1 tail = head while tail.next is not None: tail = tail.next length += 1 tail.next = head step = length - k % length for i in range(0, step - 1): head = head.next ans = head.next head.next = None return ans
def swapPairs(self, head: ListNode) -> ListNode: guard = ListNode(0) guard.next = head pre = guard while pre.next is not None and pre.next.next is not None: l = pre.next r = pre.next.next print(l.val, r.val) l.next = r.next r.next = l pre.next = r pre = l return guard.next
pre = guard while pre.next is not None and pre.next.next is not None: l = pre.next r = pre.next.next print(l.val, r.val) l.next = r.next r.next = l pre.next = r pre = l return guard.next if __name__ == "__main__": solution = Solution() l1 = ListNode(1) l2 = ListNode(2) l3 = ListNode(3) l4 = ListNode(4) l1.next = l2 l2.next = l3 l3.next = l4 l = solution.swapPairs(l1) while l is not None: print(l.val) l = l.next
l1_ptr = l1_ptr.next else: ans.next = l2_ptr l2_ptr = l2_ptr.next ans = ans.next if l1_ptr is not None: ans.next = l1_ptr else: ans.next = l2_ptr return guard.next if __name__ == "__main__": solution = Solution() node_1 = ListNode(-9) node_2 = ListNode(3) node_3 = ListNode(5) node_4 = ListNode(7) node_1.next = node_2 node_3.next = node_4 solution = Solution() head = solution.mergeTwoLists(node_1, node_3) while head is not None: print(head.val) head = head.next
while fast is not None and fast.next is not None: slow = slow.next fast = fast.next.next l1 = node l2 = slow.next slow.next = None return l1, l2 def stringList(head: ListNode): while head is not None: print(head.val) head = head.next if __name__ == "__main__": node_1 = ListNode(4) node_2 = ListNode(1) node_3 = ListNode(3) node_4 = ListNode(2) node_5 = ListNode(7) node_1.next = node_2 node_2.next = node_3 node_3.next = node_4 node_4.next = node_5 solution = Solution() head = solution.sortList(node_1) stringList(head)
输入:[1,2,3,4,5,6] 输出:此列表中的结点 4 (序列化形式:[4,5,6]) 由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。 ''' from algorithm.leetcode.model import ListNode class Solution: def middleNode(self, head: ListNode) -> ListNode: jump_1, jump_2 = head, head while jump_2 is not None and jump_2.next is not None: jump_1 = jump_1.next jump_2 = jump_2.next.next return jump_1 if __name__ == "__main__": node_1 = ListNode(1) node_2 = ListNode(2) node_3 = ListNode(3) node_4 = ListNode(4) node_5 = ListNode(5) node_1.next = node_2 #node_2.next = node_3 #node_3.next = node_4 #node_4.next = node_5 solution = Solution() print(solution.middleNode(node_1).val)
length += 1 head = head.next k = k % length for i in range(0, k): post = post.next while post.next is not None: post = post.next pre = pre.next post.next = sentinel.next sentinel.next = pre.next pre.next = None return sentinel.next if __name__ == "__main__": l1 = ListNode(0) l2 = ListNode(1) l3 = ListNode(2) l1.next = l2 l2.next = l3 solution = Solution() l = solution.rotateRight(l1, 1) while l is not None: print(l.val) l = l.next