[LeetCode]题解(python):143-Reorder List

题目来源:

  https://leetcode.com/problems/reorder-list/


题意分析:

  给定一个链表L:L0→L1→…→Ln-1→Ln,改变链表的排序为: L0→LnL1→Ln-1→L2→Ln-2→…,要求时间复杂度为O(n),不能改变节点的值。


题目思路:

  题目思路是把链表拆成两个长度相等的链表,然后将后面的链表翻转,重新连起来。


代码(python):

 1 # Definition for singly-linked list.
 2 # class ListNode(object):
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution(object):
 8     def reorderList(self, head):
 9         """
10         :type head: ListNode
11         :rtype: void Do not return anything, modify head in-place instead.
12         """
13         if head == None or head.next == None or head.next.next == None:
14             return
15         slow = fast = head
16         while fast and fast.next:
17             slow = slow.next
18             fast = fast.next.next
19         head1,head2 = head,slow.next
20         slow.next = None
21         
22         tmp = ListNode(0)
23         tmp.next,p = head2,head2.next
24         head2.next = None
25         while p:
26             tmp1,p = p,p.next
27             tmp1.next = tmp.next
28             tmp.next = tmp1
29         head2 = tmp.next
30         
31         while head2:
32             tmp2,tmp3 = head1.next,head2.next
33             head1.next = head2
34             head2.next = tmp2
35             head1,head2 = tmp2,tmp3
View Code
原文地址:https://www.cnblogs.com/chruny/p/5474653.html