slow = slow.next fast = fast.next.next ReverseHead = self.__reverse(slow.next) slow.next = None ptr1 = head ptr2 = ReverseHead while ptr1 and ptr2: tmp1 = ptr1.next tmp2 = ptr2.next ptr1.next = ptr2 ptr2.next = tmp1 ptr1 = tmp1 ptr2 = tmp2 def __reverse(self, head: ListNode) -> ListNode: dummy = ListNode(0) dummy.next = head ptr = head while ptr and ptr.next: tmp = ptr.next ptr.next = tmp.next tmp.next = dummy.next dummy.next = tmp return dummy.next str = "12345" head = createList(str) sol = Solution() sol.reorderList(head) print("123")
kPointer.next = kPointer.next.next return head def move_middle_to_head(head): prev = None slow = head fast = head.next if head else None if not fast or not slow: return head while (fast): prev = slow slow = slow.next fast = fast.next.next if fast.next else fast.next prev.next = slow.next slow.next = head return slow arr1 = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [1], [1, 2], [1, 2, 3], [], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]] for arr in arr1: head = createList(arr) head = move_middle_to_head(head) print(extractList(head))