关注公众号:【THU小鱼干杂货铺】
不间断分享LeetCode优质解题思路、大厂算法题解、学习资料等
题目
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
题解
笔记
思路:
1.初始化新链表
2.p1指针指向原排序链表1,p2指针指向原排序链表2
3.当p1和p2不为空时,比较val大小,小的放进新链表,然后原排序链表指针后移
4.当某一个链表遍历结束,把另一个没遍历完的链表直接放到新链表后
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
if(l1==nullptr&&l2==nullptr) return nullptr;
if(l1==nullptr&&l2!=nullptr) return l2;
if(l1!=nullptr&&l2==nullptr) return l1;
ListNode* p1 = l1;
ListNode* p2 = l2;
ListNode* list;
if(p1->val<=p2->val){
list = new ListNode(p1->val);
p1 = p1->next;
}
else{
list = new ListNode(p2->val);
p2 = p2->next;
}
ListNode* t = list;
while(p1!=nullptr&&p2!=nullptr){
if(p1->val<=p2->val){
t->next = new ListNode(p1->val);
p1 = p1->next;
}
else{
t->next = new ListNode(p2->val);
p2 = p2->next;
}
t = t->next;
}
if(p1!=nullptr)
t->next = p1;
if(p2!=nullptr)
t->next = p2;
return list;
}
};