【力扣】合并两个有序链表
来源:力扣(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)
浙公网安备 33010602011771号