一、介绍
1.题目描述
题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的

2.测试样例
[1,2,4]
[1,3,4]
# [1,1,2,3,4,4]
[]
[]
# []
[]
[0]
# [0]
二、题解
- 当字符串长度为奇数,必定不匹配
- 将左括号推入,右括号进入时,若匹配则弹出,否则一定不匹配
1、新建链表、迭代合并🟡
新建一个链表p,新建q=p,q作为加入元素的指针。
由于链表已经升序,直接遍历两个原始链表,不断将当前最小值加入新链表,指针后移,就可以得到解
1、当 l1 指向的数值< l2指向的数值,l1赋给 q,l1指针后移;反之l2赋给 q,l2指针后移。
2、p后移
3、重复步骤12,直至某个链表为空
4、将另一个非空链表直接加在最后
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *p=new ListNode(-1);
ListNode *q=p;
while(l1!=nullptr&&l2!=nullptr){
// 数值小的链表赋给 q , 链表指针后移,q 后移
if(l1->val<l2->val){
q->next=l1;
l1=l1->next;
}
else{
q->next=l2;
l2=l2->next;
}
q=q->next;
}
// 某个原链表为空后,将另一个的剩余内容加到末尾
q->next=l1==nullptr?l2:l1;
return p->next;
}
};

2、递归🟡
该题的递归公式如下:
![]()
- 若其中一个链表为空,则返回另一个链表
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==nullptr) return l2;
if(l2==nullptr) return l1;
if(l1->val<l2->val) {
l1->next=mergeTwoLists(l1->next,l2);
return l1;
}
else{
l2->next=mergeTwoLists(l1,l2->next);
return l2;
}
}
};

544

被折叠的 条评论
为什么被折叠?



