/**
* 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) {
ListNode dummy(-1);
ListNode* cur = &dummy;
ListNode* tmpl1 = l1, *tmpl2 = l2;
//corner cases
if(l1 == NULL){
return l2;
}
if(l2 == NULL){
return l1;
}
//just swap pointer is ok
//swaping pointer is a trick
if(tmpl1->val >= tmpl2->val){
ListNode* tmp = tmpl2;
tmpl2 = tmpl1;
tmpl1 = tmp;
}
//tmpl1->val < tmpl2->val
ListNode*prev = &dummy;
dummy.next = tmpl1;
prev = dummy.next;
tmpl1 = tmpl1->next;
while(tmpl1 != NULL && tmpl2 != NULL){
if(tmpl2->val < tmpl1->val){
ListNode* l2next = tmpl2->next;
//insert tmpl2 into tmpl2
prev->next = tmpl2;
prev = tmpl2;//update prev pointer of tmpl1
tmpl2->next = tmpl1;
//forward tmpl2
tmpl2 = l2next;
}
else{
prev = tmpl1;
tmpl1 = tmpl1->next;
}
}
if(tmpl2 != NULL){
prev->next = tmpl2;
}
return dummy.next;
}
};
leetcode Merge Two Linked List
最新推荐文章于 2021-03-02 08:41:26 发布