Leetcode做題日記:21. 合併兩個有序連結串列(PYTHON)
阿新 • • 發佈:2019-01-01
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入: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
'''