题解
链表简单题
两个有序链表的合并问题
新建一个有头指针的链表,然后新建一个指针指向他,在l1 和 l2 中进行移动,l1的数字小,那么把l1加进去,后移一个,l2同理
当出现一个为空时后面的也不需要进行比较了。直接向后填充即可。
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* preHead = new ListNode(-1);
ListNode* pre = preHead;//prev进行自由变换
while(l1 != nullptr && l2 != nullptr){
if(l1->val < l2->val){
pre->next = l1;
l1 = l1->next;
}else{
pre->next = l2;
l2 = l2->next;
}
pre = pre->next;
}
//合并剩下的
pre->next = l1 == nullptr ? l2 : l1;
return preHead->next;
}
};