連結串列習題3:合併兩個有序連結串列
阿新 • • 發佈:2020-12-12
技術標籤:資料結構與演算法
問題:
將兩個升序連結串列合併為一個新的 升序 連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
Python解法1:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
if l1 is None and l2 is None:
return l1
elif l1 is None and l2 is not None:
return l2
elif l1 is not None and l2 is None:
return l1
else:
l = []
p1 = l1
p2 = l2
while p1 :
l.append(p1.val)
p1 = p1.next
while p2 :
l.append(p2.val)
p2 = p2.next
l.sort()
head = ListNode(val = l[0])
for i in range(len(l)):
if i == 0 :
p = head
else:
p.next = ListNode(l[i])
p = p.next
return head
經驗:
1.函式最後返回頭結點head才能輸出完整的連結串列,返回p只能返回一個結點
2.這種解法要考慮輸入的引數連結串列為空的情況,
3.head的宣告如果放在for迴圈裡面就會出現local variable referenced before assignment
4.這種解法思路直接,但演算法時間複雜度和空間複雜度太差,僅用於理解