思路比较简单,就是先把链表分成两段,然后把后半段反转,然后依次插入前半段的链表中。
import copy
"""
Definition of ListNode
class ListNode(object):
def __init__(self, val, next=None):
self.val = val
self.next = next
"""
class Solution:
"""
@param head: The first node of the linked list.
@return: nothing
"""
def reorderList(self, head):
# write your code here
if not head:
return
n = 0
p1 = head
while p1:
n += 1
p1 = p1.next
if n == 1 or n == 2:
return head
m = n / 2
p2 = head
for i in range(m - 1):
p2 = p2.next
p3 = p2.next
p4 = p2.next
p5 = None
while p3.next:
p5 = p3.next
p3.next = p3.next.next
p5.next = p4
p4 = p5
my_head = p5
p6 = head
p7 = my_head
p8 = my_head
for i in range(n-m):
p8 = p8.next
p7.next = p6.next
p6.next = p7
p6 = p6.next.next
p7 = p8
p6.next = None
return head