题目描述:
输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
限制:
0 <= 链表长度 <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路分析:
双指针指向两个链表。小结点被放入结果链表。一个链表先处理完,在处理剩余那个链表。
代码:
/**
* 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==NULL)
return l2;
if(l2==NULL)
return l1;
ListNode *dummy = new ListNode(-1);
ListNode *ptr0 =dummy,*ptr1=l1,*ptr2=l2;
while(ptr1!=NULL && ptr2!=NULL) {
if(ptr1->val < ptr2->val) {
ListNode *tmp = ptr1;
ptr1 = ptr1->next;
ptr0->next = tmp;
ptr0 = ptr0->next;
} else {
ListNode *tmp = ptr2;
ptr2 = ptr2->next;
ptr0->next = tmp;
ptr0 = ptr0->next;
}
}
if(ptr1!=NULL)
ptr0->next = ptr1;
if(ptr2!=NULL)
ptr0->next = ptr2;
return dummy->next;
}
};