1. 程式人生 > 其它 >Leetcode - 21. 合併兩個有序連結串列

Leetcode - 21. 合併兩個有序連結串列

將兩個升序連結串列合併為一個新的升序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。

示例 1:

輸入:l1 = [1,2,4], l2 = [1,3,4]
輸出:[1,1,2,3,4,4]

示例 2:

輸入:l1 = [], l2 = []
輸出:[]

示例 3:

輸入:l1 = [], l2 = [0]
輸出:[0]

提示:

  • 兩個連結串列的節點數目範圍是 [0, 50]
  • -100 <= Node.val <= 100
  • l1 和 l2 均按 非遞減順序 排列

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/merge-two-sorted-lists


著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解1 2021/8/29 O(logn)

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
    def __repr__(self):
        return '{}'.format(self.val) + (('->' + self.next.__repr__()) if self.next else '')

def mergeTwoLists(l1: ListNode, l2: ListNode) -> ListNode:
    # 正常連結串列操作就行
    # 這裡試試轉成list,sort,再建立ListNode,看超不超時
    l=[]
    while l1:
        l.append(l1.val)
        l1=l1.next
    while l2:
        l.append(l2.val)
        l2=l2.next
    l.sort()
    dummy=ListNode(-1)
    tmp=dummy
    for x in l:
        tmp.next=ListNode(x)
        tmp=tmp.next
    return dummy.next

if __name__ == '__main__':
    l1=ListNode(1,ListNode(2,ListNode(4)))
    l2=ListNode(1,ListNode(3,ListNode(4)))
    print(mergeTwoLists(l1,l2))
    print(mergeTwoLists(None,None))
    print(mergeTwoLists(None,ListNode(0)))
    l1=ListNode(5,ListNode(12))
    l2=ListNode(1,ListNode(3,ListNode(4)))
    print(mergeTwoLists(l1,l2))

這麼蠢的解法竟然還挺快,有點意思