leetcode: Reorder List 的Python实现

来源:互联网 发布:windows更新清理 编辑:程序博客网 时间:2024/06/05 00:33

题目:

Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-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}.


思路:

1. 将list从中间切成两段,并找到中间的结点 mid(findMid);

2. 对mid做链表翻转,返回翻转后的链表头 head2(reverse);

3. 将head 和 head2 做交叉合成(merge);

class Solution(object):    def reorderList(self, head):        if not head or not head.next or not head.next.next:  #如果只有两个以内的结点,直接返回            return head        mid = self.findMid(head)        head2 = self.reverse(mid)        phead = self.merge(head,head2)        return phead            def findMid(self,head):        slow = head        fast = head        while fast and fast.next:            slow = slow.next            fast = fast.next.next        mid = slow.next        slow.next = None        return mid            def reverse(self,head):        if not head or not head.next:            return head        p_next = None        phead = head        while phead:            p = phead            phead = phead.next            p.next = p_next            p_next = p        return p_next        def merge(self,head1,head2):        phead = head1        while head2:            x = head1.next            y = head2.next            head1.next = head2            head2.next = x            head1 = head1.next.next                        head2 = y        return phead



0 0
原创粉丝点击