题目连结:https://leetcode.com/problems/merge-two-sorted-lists/
题目叙述:
测资的 Input/Output:
会拿到两个 linked list,需要合并後回传
这一题可以使用递回或迭代的方法实作,我们接下来会依序介绍
class Solution:
def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
# 若 l1 为空,就没必要比较,直接回传 l2,反之亦然
if l1 == None:
return l2;
if l2 == None:
return l1;
# 判断 input 的 l1 与 l2 第一个值谁比较大 (随着每次呼叫自己,l1与l2会越来越短)
if l1.val < l2.val:
# l1 比较小,所以 l1 第一个值留下来,把 l1.next (第二个)值 跟 l2 再执行一次自身 function
l1.next = self.mergeTwoLists(l1.next, l2);
# 此时 return 的 l1 会是整串的,会包含 与 l2 相比,vl 这个比较小的值(第一个值),还有 self.mergeTwoLists(l1.next, l2) 後的结果
return l1;
else:
l2.next = self.mergeTwoLists(l1, l2.next);
return l2;
class Solution:
def mergeTwoLists(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
# 产生一个 ListNode 型态的 linked list,并且 val 里面塞 None (next 预设为 None)
merge = ListNode(None)
# 用一个 pointer 指向 linked list尾端,随着不断 merge,将永远指向 merge linked list 尾端来新增 node
cursor = merge
# 若 l1 跟 l2 都不为空,则进行比较
while l1 and l2:
# 比较 l1 跟 l2 的第一个元素 val,比较小的则加入 cursor 中,并将 後面的 linked list 覆盖上原 linked list (所以比较小的数字会消失)
if l1.val <= l2.val:
cursor.next = l1
l1 = l1.next
elif l1.val > l2.val:
cursor.next = l2
l2 = l2.next
cursor = cursor.next
# 若 l2 空了,则将剩下的 l1 全部接到尾端,反之亦然
if l1:
cursor.next = l1
else:
cursor.next = l2
return merge.next
<<: 【PHP Telegram Bot】Day04 - Telegram 机器人的设定
>>: Day3:交叉验证法(Cross-validation)
大家早安 最近一直活在赶文章的生活中,终於完成快 50 % 的进度,感动想哭 前几天我们顺利撷取 G...
现在我们先来看看例子吧! Vue 的实体是透过 new 这个关键字来建立的。 再来我们会在body中...
图片来源:https://3c.ltn.com.tw/news/45392 现在已经是人手一机的时...
此系列文章会同步发文到个人部落格,有兴趣的读者可以前往观看喔。 今天要跟大家分享当网站有用到 Ja...
进度来到第三天,终於要打开 tableau public 并实际操作看看了,大家是不是也很期待呢? ...