🐡
【LeetCode】21. Merge Two Sorted Lists
問題概要
ソートされた2つの連結リストを統合して,ソートされた連結リストを返す.
例:
Input: l1 = [1,2,4], l2 = [1,3,4]
Output: [1,1,2,3,4,4]
制約
- 各リストのノードの数
[0,50] -100 \leq Node.val \leq 100 -
l1
,l2
はどちらも昇順にソートされている
考えたこと
-
l1
,l2
の先頭から を比較して小さい方をNode.val に結合res - 結合した方のノードを一つ進める
- 一方が
null
になるまで①→②を繰り返す -
null
でない方をres
に結合
という手順でいけそう.
例を利用すると,
l1 = [1,2,4]
l2 = [1,3,4]
res = []
同じ値なのでl1
を採用
l1 = [2,4]
l2 = [1,3,4]
res = [1]
l2
を採用
l1 = [2,4]
l2 = [3,4]
res = [1,1]
l1
を採用
l1 = [4]
l2 = [3,4]
res = [1,1,2]
l2
を採用
l1 = [4]
l2 = [4]
res = [1,1,2,3]
同じ値なのでl1
を採用
l1 = []
l2 = [4]
res = [1,1,2,3,4]
l1 == null
なので,l2
以下を全てres
に結合
l1 = []
l2 = []
res = [1,1,2,3,4,4]
このように所望の結果が得られる.
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def mergeTwoLists(self, l1, l2):
"""
:type l1: ListNode
:type l2: ListNode
:rtype: ListNode
"""
dummy = res = ListNode()
while l1 and l2:
if l1.val <= l2.val:
dummy.next = l1
l1 = l1.next
else:
dummy.next = l2
l2 = l2.next
dummy = dummy.next
dummy.next = l1 or l2
return res.next
Tips
下から2行目の
dummy.next = l1 or l2
はステップ4.に相当し,
- まず
l1
を評価してl1 == None
の時はl2
を返す. -
l1 != None
の時はl1
を返す.
という処理が行われます[1].
Discussion