[Leetcode解題] Merge Two Sorted Lists - 指針解
題目
21. Merge Two Sorted Lists
給定兩個排的List: list1 和 list2。
將這兩個給定兩個排的List合併為一個排序的給定兩個排的List。合併的過程應該通過拼接第一個和第二個給定兩個排的List的節點完成。
返回合併後List的head。
解題思路
不論這兩條List
有沒有排序過,都可以直接將這兩條List
拼起來再做sort,這樣的時間複雜度是O(nlogn), n為兩條List
總元素個數。
因為兩條List
都是排序好的,因此可以試著運用這個特性,來減少計算量。
比較兩條排序好的list
的第一個元素,將比較小的元素接到比較result後,直到至少有一條List為空
只剩下一條list還有元素,把這條list剩餘的元素按照順序直接放到result的最尾端
我們就成功把兩條排序好的List合成一條排序好的List了!!
實作
# 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, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
cr = mergeList = ListNode()
while list1 and list2:
if list1.val < list2.val:
cr.next = list1
list1 = list1.next
cr = cr.next
else:
cr.next = list2
list2 = list2.next
cr = cr.next
cr.next = list1 if list1 else list2
return mergeList.next