您的位置:首页 > 职场人生

[leetcode] Reorder List

2014-11-14 09:05 302 查看
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}
.

思路是,先利用双指针找到中节点,分奇偶两种情况。然后将后半边的list倒序(用三个节点处理), 最后再将两个list合并,如果是奇数个,合并完了再补上中节点。

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None

class Solution:
# @param head, a ListNode
# @return nothing
def reorderList(self, head):
if head == None or head.next == None or head.next.next == None:
return
head1 = head
head2 = head
while head2 != None and head2.next != None:
head2 = head2.next.next
head1 = head1.next
if head2 == None:
flag = 0
newhead = head1
elif head2.next == None:
flag = 1
newhead = head1.next
curnode = newhead
if newhead.next == None:
nextnode = None
else:
nextnode = newhead.next
prevnode = None
while curnode != None:
curnode.next = prevnode
prevnode = curnode
curnode = nextnode
if nextnode != None:
nextnode = nextnode.next
newhead = prevnode
prenode = head
postnode = newhead
while True:
pretemp = prenode.next
posttemp = postnode.next
prenode.next = postnode
if posttemp == None:
if flag == 1:
postnode.next = head1
head1.next = None
else:
postnode.next = None
break
postnode.next = pretemp
prenode = pretemp
postnode = posttemp




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息