Leetcode 21:2つの秩序チェーンテーブルをマージ(最も詳細な解決策!!)
8733 ワード
2つの順序付きチェーンテーブルを新しい順序付きチェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:
問題を解く構想.
この問題は簡単で、新しいチェーンテーブルを新しく作成します.2つのポインタ
上の書き方をもっと簡潔に書くこともできます
この問題のもっと優秀な解法は再帰であるべきだ.
この問題の他の言語バージョンをGitHub Leetcodeに追加しました
もし問題があれば、皆さんに指摘してほしい!!!
例:
:1->2->4, 1->3->4
:1->1->2->3->4->4
問題を解く構想.
この問題は簡単で、新しいチェーンテーブルを新しく作成します.2つのポインタ
cur1
およびcur2
が確立され、それぞれ2つのチェーンテーブルを指す.次に、2つのチェーンテーブルの各要素のサイズを比較することで、小さな要素を新しいチェーンテーブルに追加するだけです.最後に、cur1
とcur2
がそれぞれのチェーンテーブルの末尾であるかどうかを判断し、そうでなければ、残りの要素を新しいチェーンテーブルの末尾に追加すればよい.class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
h = ListNode(-1)
cur = h
cur1 = l1
cur2 = l2
while cur1 != None and cur2 != None:
if cur1.val <= cur2.val:
cur.next = cur1
cur1 = cur1.next
else:
cur.next = cur2
cur2 = cur2.next
cur = cur.next
if cur1 != None:
cur.next = cur1
if cur2 != None:
cur.next = cur2
return h.next
上の書き方をもっと簡潔に書くこともできます
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
head = pre = ListNode(-1)
while l1 or l2:
if not l1:
pre.next = l2
break
elif not l2:
pre.next = l1
break
elif l1.val < l2.val:
pre.next = l1
l1 = l1.next
else:
pre.next = l2
l2 = l2.next
pre = pre.next
return head.next
この問題のもっと優秀な解法は再帰であるべきだ.
class Solution:
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
if not l1: return l2
if not l2: return l1
if l1.val < l2.val:
l1.next = self.mergeTwoLists(l1.next, l2)
return l1
else:
l2.next = self.mergeTwoLists(l1, l2.next)
return l2
この問題の他の言語バージョンをGitHub Leetcodeに追加しました
もし問題があれば、皆さんに指摘してほしい!!!