- Merge Two Sorted Lists
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.
Example
Note
- we should use a dummy head to mark the beginning of the result node list
- To move the node to next, we should firstly assign value to node.next. Then, move the pointer to next.
Solution 1: iteration, iterate through the two lists and remember to add the remaining of the longer list to the result list
Time Complexity: O(m) where m is the shorter length , Space Complexity: O(m+n)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);
ListNode dummy = head;
while(l1 != null && l2 != null) {
// we should first set the value of next node and then move the pointer to next
if(l1.val <= l2.val) {
head.next = l1;
l1 = l1.next;
} else {
head.next = l2;
l2 = l2.next;
}
head = head.next;
}
if(l1 != null) {
head.next = l1;
}
if(l2 != null) {
head.next = l2;
}
return dummy.next;
}
}
Solution 2: recursive
Time Complexity: O(m) where m is the shorter length , Space Complexity: O(m+n)
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null)
return l2;
if(l2 == null)
return l1;
ListNode head = new ListNode(0);
if(l1.val <= l2.val) {
head = l1;
head.next = mergeTwoLists(l1.next,l2);
} else {
head = l2;
head.next = mergeTwoLists(l1,l2.next);
}
return head;
}
}