leetcode21_Merge Two Sorted Lists
一.問題描述
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
#合併兩個有序連結串列,當然要求結果也是有序連結串列
#Definition for singly-linked list.
class ListNode(object):
def __init__(self, x):
self.val = x
self.next = None
二.程式碼編寫
稍作思考,便知對有序連結串列的合併是通過兩個指標來遍歷實現的,時間複雜度O(m+n)
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if l1 == None and l2 == None:
return None
elif l1 == None:
return l2
elif l2 == None:
return l1
elif l1.val < l2.val:
rNode = ListNode(l1.val)
i = l1.next
j = l2
else:
rNode = ListNode(l2.val)
i = l1
j = l2.next
rN = rNode
while i != None and j != None:
if i.val < j.val:
rN.next = ListNode(i.val)
i = i.next
else:
rN.next = ListNode(j.val)
j = j.next
rN = rN.next
if i != None:
rN.next = i
elif j != None:
rN.next = j
return rNode
三.演算法改進
上述演算法ac之後執行時間僅僅打敗百分之十幾的演算法提交,同時不得不說其程式碼也實在是冗長- -。
兩個可改進的地方:
1)給連結串列新增一個頭結點,則可減少多次對連結串列是否為None的判斷(輸出的時候再去掉頭結點即可)。
2)不用每次新建一個ListNode節點新增在返回連結串列上,只用將原結點接在輸出結點後面就好。
class Solution(object):
'''
題意:合併兩個有序連結串列
'''
def mergeTwoLists(self, l1, l2):
dummy = ListNode(0)
tmp = dummy
while l1 != None and l2 != None:
if l1.val < l2.val:
tmp.next = l1
l1 = l1.next
else:
tmp.next = l2
l2 = l2.next
tmp = tmp.next
if l1 != None:
tmp.next = l1
else:
tmp.next = l2
return dummy.next
注:經測試,第二節中原始程式碼執行時間為88ms,對2)進行改進之後為69ms,對1)2)均進行改進之後(得上述程式碼)執行時間為52ms。
總結:對連結串列而言,頭結點在關鍵時候很有用!~
相關文章
- Leetcode Merge Two Sorted ListsLeetCode
- Leetcode 21 Merge Two Sorted ListsLeetCode
- Leetcode-Merge Two Sorted ListsLeetCode
- Merge Two Sorted Lists leetcode javaLeetCodeJava
- LeetCode 21. Merge Two Sorted ListsLeetCode
- LeetCode 第 21 題 (Merge Two Sorted Lists)LeetCode
- LeetCode Merge Two Sorted Lists(021)解法總結LeetCode
- [LintCode] Merge Two Sorted Lists 混合插入有序連結串列
- [LeetCode] Merge Two Sorted Lists 混合插入有序連結串列LeetCode
- 資料結構與演算法 | Leetcode 21:Merge Two Sorted Lists資料結構演算法LeetCode
- Leetcode Merge k Sorted ListsLeetCode
- Leetcode 23 Merge k Sorted ListsLeetCode
- Leetcode-Merge k Sorted ListsLeetCode
- Merge k Sorted Lists leetcode javaLeetCodeJava
- Swift-Median of Two Sorted ArraysSwift
- [leetCode][003] Intersection of Two Linked ListsLeetCode
- Leetcode-Intersection of Two Linked ListsLeetCode
- 【Leetcode】23. Merge k Sorted ListsLeetCode
- leetcode23_Merge k Sorted ListsLeetCode
- Leetcode Median of Two Sorted ArraysLeetCode
- Leetcode 160. Intersection of Two Linked ListsLeetCode
- 【Leetcode】160. Intersection of Two Linked ListsLeetCode
- Leetcode 4 Median of Two Sorted ArraysLeetCode
- Leetcode-Median of Two Sorted ArraysLeetCode
- Median of Two Sorted Array leetcode javaLeetCodeJava
- LeetCode 4. Median of Two Sorted ArraysLeetCode
- LeetCode2:Median of Two Sorted ArraysLeetCode
- 20171211 查詢+心得Map two lists into a dictionary in PythonPython
- LeetCode Median of Two Sorted Arrays(004)解法總結LeetCode
- 【Leetcode】167. Two Sum II - Input array is sortedLeetCode
- 【LeetCode從零單排】No.160 Intersection of Two Linked ListsLeetCode
- [LeetCode] Merge k Sorted Lists 合併k個有序連結串列LeetCode
- Fourth. LeetCode 21:MergeTwo Sorted Lists 合併兩個有序連結串列LeetCode
- Sitecore ListManager Contact Lists vs Segment Lists
- [LeetCode] Median of Two Sorted Arrays 兩個有序陣列的中位數LeetCode陣列
- LeetCode 之 JavaScript 解答第23題 —— 合併K個有序連結串列(Merge K Sorted Lists)LeetCodeJavaScript
- leetcode 4. Median of Two Sorted Arrays 尋找兩個正序陣列的中位數(困難)LeetCode陣列
- Laravel 5.4 使用 pluck () 代替 lists ()Laravel