Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
http://oj.leetcode.com/problems/merge-two-sorted-lists/
Solution:
Since the two lists are sorted, we can compare the two heads and add the smaller one to the new list, then move the next node. The algorithm is obviously and is part of the merge sort.
https://github.com/starcroce/leetcode/blob/master/merge_two_sorted_lists.cpp
// 48 ms for 208 test cases
// Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
/**
* 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) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(l1 == NULL) {
return l2;
}
if(l2 == NULL) {
return l1;
}
ListNode *head = new ListNode(-1);
ListNode *p = head;
while(l1 != NULL && l2 != NULL) {
if(l1->val < l2->val) {
p->next = l1;
l1 = l1->next;
p = p->next;
}
else {
p->next = l2;
l2 = l2->next;
p = p->next;
}
}
// if there is some remaining list
if(l1 != NULL) {
p->next = l1;
}
if(l2 != NULL) {
p->next = l2;
}
return head->next;
}
}