Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes’ values.
For example,
Given {1,2,3,4}, reorder it to {1,4,2,3}.
思路:反转后半个链表,依次拼接
注意:在前后链表依次拼接时,拼接一个结点后,该结点所在链表指针得后移一位,再拼接另一链表结点,否则会导致前后两链表改变
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def reverseList(self,head):
if not head or not head.next:
return head
newhead=None
while head:
p=head
head=head.next
p.next=newhead
newhead=p
return newhead
def reorderList(self, head):
if not head or not head.next or not head.next.next:
return
dummy=ListNode(0)
dummy.next=head
slow=fast=dummy
while fast.next and fast.next.next:
slow=slow.next
fast=fast.next.next
headB=self.reverseList(slow.next)
headA=dummy.next
slow.next=None
new=ListNode(0)
p=new
while headA and headB:
p.next=headA
headA=headA.next
p.next.next=headB
headB=headB.next
p=p.next.next
if headB:
p.next=headB
head=new.next
开始运行的时候老是报错:Do not return anything, modify head in-place instead
主要原因是题目要求:不要返回值,只需要将原链表修改为新链表