leetcode--Reorder List--ポイントは、面接問題としてふさわしいです。
4373 ワード
https://leetcode.com/problems/reorder-list/
コード1
参照http://bookshadow.com/weblog/2015/01/29/leetcode-reorder-list/
考え方:1.速い針でチェーンの中の点midを見つけて、チェーンの表を左右の半分に分けます。チェーンの右の部分を定位置で逆置します。チェーンの左右の部分を結合します。(左と右のすべての要素を通り抜けます。)
問題解決の考え:1、まずチェーンを二つの等しい長さのチェーンに切ります。チェーンの長さが奇数なら、第一のチェーンの長さは1より多いです。元のチェーンがL={1,2,3,4,5}だったら、分割結果はL 1={1,2,3}です。L 2={4,5}分解の技術は、やはり、針を速くする技術です。
2は、L 2={4,5}をL 2={5,4}に反転させるように、第2のチェーンL 2を反転させます。
コード1
参照http://bookshadow.com/weblog/2015/01/29/leetcode-reorder-list/
考え方:1.速い針でチェーンの中の点midを見つけて、チェーンの表を左右の半分に分けます。チェーンの右の部分を定位置で逆置します。チェーンの左右の部分を結合します。(左と右のすべての要素を通り抜けます。)
class Solution(object):
def reorderList(self, head):
""" :type head: ListNode :rtype: void Do not return anything, modify head in-place instead. """
if head and head.next and head.next.next:
#find mid
slow = head
fast = head
while fast.next and fast.next.next:
slow = slow.next
fast = fast.next.next
mid = slow
#cut in the mid
left = head
right = mid.next
if right is None:
return head
mid.next = None
#reverse right half
cursor = right.next
right.next = None
while cursor:
next = cursor.next
cursor.next = right
right = cursor
cursor = next
#merge left and right
dummy = ListNode(0)
while left or right:
if left is not None:#
dummy.next = left
left = left.next
dummy = dummy.next
if right is not None:# dummy
dummy.next = right
right = right.next
dummy = dummy.next
私の再帰アルゴリズムはTLEタイムアウトです。class Solution(object):
def reorderList(self, head):
""" :type head: ListNode :rtype: void Do not return anything, modify head in-place instead. """
if not head or not head.next or not head.next.next: return head
cur = head
dummy = ListNode(0)
dummy.next = head
pre, last = dummy, head
while last.next:
pre = last
last = last.next
pre.next = None
tmp = cur.next
cur.next, last.next = last, tmp
self.reorderList(tmp)
コード2問題解決の考え:1、まずチェーンを二つの等しい長さのチェーンに切ります。チェーンの長さが奇数なら、第一のチェーンの長さは1より多いです。元のチェーンがL={1,2,3,4,5}だったら、分割結果はL 1={1,2,3}です。L 2={4,5}分解の技術は、やはり、針を速くする技術です。
2は、L 2={4,5}をL 2={5,4}に反転させるように、第2のチェーンL 2を反転させます。
3, 。
http://www.cnblogs.com/zuoyuan/p/3700846.html