1. 程式人生 > >Leetcode做題日記:21. 合併兩個有序連結串列(PYTHON)

Leetcode做題日記:21. 合併兩個有序連結串列(PYTHON)

將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4


        L1=ListNode(0)
        L1.next=l1
        L2=ListNode(0)
        L2.next=l2
        l3=ListNode(0)
        LL=l3
        s1=L1
        s2=L2
        
        if
L1.next == None: return l2 if L2.next == None: return l1 s1=s1.next #指向當前輸入的第一個值 s2=s2.next while s1 != None or s2 !=None: if s1==None: l3.next=s2 #s1都沒了,直接接上s2 break if s2==None: l3.
next=s1 break if s1.val <=s2.val: L4=ListNode(s1.val) #建立新的節點,來儲存這個最小值 l3.next=L4 #最初l3.next是None,所以新添節點 l3=l3.next #更新當前指向的節點,因為已經更新連結串列了 s1=s1.next #新增s1中的值,s1下一個接上,s2不動 continue #避免繼續執行下一個if
if s1.val >s2.val: L4=ListNode(s2.val) l3.next=L4 l3=l3.next s2=s2.next return LL.next #新增到空連結串列中的方式,把小的新增到LL中,更新小的那個連結串列,再迭代 #L1是什麼樣子的呢,是{0,[1,2,4]},最後返回LL.next,很有意思 #特別注意連結串列的使用規則,什麼時候next,什麼時候用val,要搞清楚 #我添加了一個continue,不然會立馬執行下一個if,36ms,只擊敗59% ''' #第一次的程式碼,在判斷輸入[1,2,4]和[1,3,4]時很好,但是遇到[5]和[1,3,4]時,輸 #出的時[1,5,3,4]顯然不對了,因為我把每一輪都新增l1,l2中的一個,但是沒有考慮 #和之後的數字比較大小的過程 if L1.next == None: return l2 if L2.next == None: return l1 s1=s1.next s2=s2.next while s1 != None or s2 !=None: if s1==None: l3.next=s2 break if s2==None: l3.next=s1 break if s1.val <=s2.val: L4=ListNode(s1.val) l3.next=L4 l3=l3.next l4=ListNode(s2.val) l3.next=l4 l3=l3.next if s1.val >s2.val: L4=ListNode(s2.val) l3.next=L4 l3=l3.next l4=ListNode(s1.val) l3.next=l4 l3=l3.next s1=s1.next s2=s2.next return LL.next '''