快慢指针找中点(偶数数列时可选择前一个中点还是后一个中点:这里选择前一个中点) 反转列表(反转时要head,mid 会改变) head 从 1->2->3->4->N 变为 1->2->3->N 再反转中3的 next 被从4 改为null
merget'wolists 一定不能忘了左边的list要制定end node None: mid.next = None
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def middleNode(self,head):
# return the first middle node when array is of even length
fast,slow = head,head
while fast and fast.next and fast.next.next:
fast = fast.next.next
slow = slow.next
return slow
def reverseList(self, start):
pre,cur = None, start
while cur:
temp = cur.next
cur.next = pre
pre = cur
cur = temp
return pre
def mergeList(self, l1,l2):
while l1 and l2:
l1_temp = l1.next
l2_temp = l2.next
l1.next = l2
l1 = l1_temp
l2.next = l1
l2 = l2_temp
def reorderList(self, head: ListNode) -> None:
"""
Do not return anything, modify head in-place instead.
"""
print(head)
if not head:
return None
mid = self.middleNode(head)
l2 = self.reverseList(mid.next)
mid.next = None
self.mergeList(head,l2)