[LeetCode] 143.並べ替えリストの問題解決レポート(Python)
143 Reorder List Problem Solving Report
ラベル(スペース区切り):LeetCode
著者:Xue MingZhuネガティブ
id:fuxuemingzhu
個人ブログ: http://fuxuemingzhu.me/
タイトルアドレス: https://leetcode.com/problems/reorder-list/description/
タイトル説明:
単一リンクリストLが与えられた場合:L0→L1→…→Ln-1→Ln、
次のように並べ替えます:L0→Ln→L1→Ln-1→L2→Ln-2→…
リストのノードの値を変更することはできません。変更できるのはノード自体のみです。
例1:
Given 1->2->3->4, reorder it to 1->4->2->3.
例2:
Given 1->2->3->4->5, reorder it to 1->5->2->4->3.
件名
リンクリストの前半は正順、後半は逆順で、1つずつ接続されています。
問題解決方法
タイトルの通り、3つのステップが必要です。実際、この質問は非常に巧妙で、リンクリストの調査で詳しく説明されています。 3つの質問と言えます。
コードは少し長く、3つのステップで書かれています。この問題では、新しいノードを返すことができないため、問題が大きくなります。
# Definition for singly-linked list. # class ListNode(object): # def __init__(self, x): # self.val = x # self.next = None 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 fast, slow = head, head while fast.next and fast.next.next: fast = fast.next.next slow = slow.next head1 = head head2 = slow.next slow.next = None # reverse linked list head2 dummy = ListNode(0) dummy.next = head2 p = head2.next head2.next = None while p: temp = p p = p.next temp.next = dummy.next dummy.next = temp head2 = dummy.next # merge two linked list head1 and head2 p1 = head1 p2 = head2 while p2: temp1 = p1.next temp2 = p2.next p1.next = p2 p2.next = temp1 p1 = temp1 p2 = temp2
日付
2018年6月25日---新しい週、物事を心配するのをやめなさい。