Harukaze

 

【力扣】合并两个有序链表

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例 1:

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

第二三次接触这类链表题目,仿写了一段,没写完,想的是用head空列表让start_1指针引导的$l_1$链表与start_2指针引导的$l_2$链表所指向的当前元素比大小,小的可以入head空列表,一直比较到链表的结尾,然后我想用for循环发现根本下不了手,因为不知道两个列表谁长谁短,一看答案,明白了要用递归解决。

我的思维卡壳现场:

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, val=0, next=None):
 4 #         self.val = val
 5 #         self.next = next
 6 class Solution:
 7     def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
 8         if not l1:
 9             return l2
10         if not l2:
11             return l1
12         statr_1 = ListNode(None)
13         statr_1.next = l1
14         statr_2 = ListNode(None)
15         statr_2.next = l2
16         head = ListNode(None)
17         

递归解法:

终止条件:当两个链表都为空时,表示我们对链表已合并完成。
如何递归:我们判断 l1 和 l2 头结点哪个更小,然后较小结点的 next 指针指向其余结点的合并结果。(调用递归)

 1 class Solution:
 2     def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
 3         if not l1: return l2  # 终止条件,直到两个链表都空
 4         if not l2: return l1
 5         if l1.val <= l2.val:  # 递归调用
 6             l1.next = self.mergeTwoLists(l1.next,l2)
 7             return l1
 8         else:
 9             l2.next = self.mergeTwoLists(l1,l2.next)
10             return l2
11 
12 作者:z1m
13 链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/solution/yi-kan-jiu-hui-yi-xie-jiu-fei-xiang-jie-di-gui-by-/
14 来源:力扣(LeetCode)

 

posted on 2021-03-08 14:33  Harukaze  阅读(126)  评论(0)    收藏  举报

导航