思路:
1. 通過快慢指針,一個步長爲1, 一個步長爲2, 找到鏈表中點。
2. 前/後 半段鏈表反轉。
3. 與另一半鏈表歸併插入。
class Solution:
def reorderList(self, head):
"""
:type head: ListNode
:rtype: void Do not return anything, modify head in-place instead.
"""
if head == None or head.next == None:
return
pre = head
lat = head.next
while lat != None and lat.next != None:
pre = pre.next
lat = lat.next.next
p = pre.next
pre.next = None
# reverse
cur = None
while p != None:
q = p.next
p.next = cur
cur = p
p = q
pre = head
while pre != None and cur != None:
tmp = cur.next
cur.next = pre.next
pre.next = cur
pre = pre.next.next
cur = tmp