Sunday, February 9, 2014

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.

Solution:
Recursive solution is precise and clean. 

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) return l2;
        if (l2 == null) return l1;
        
        if(l1.val < l2.val){
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        }       
        else{
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
        
    }
}
non-recursion approach(trivial):
public class Solution {
    public ListNode mergeTwoLists(ListNode L1, ListNode L2) {
        ListNode dummy = new ListNode(0);
        ListNode prev = dummy;
        while(L1 != null || L2 != null){
            if(L1 != null && L2 == null){
                prev.next = L1;
                prev = L1;
                L1 = L1.next;
            }
            else if(L2 != null && L1 == null){
                prev.next = L2;
                prev = L2;
                L2 = L2.next;
            }
            if(L1 != null && L2 != null){
                if(L1.val < L2.val){
                    prev.next = L1;
                    prev = L1;
                    L1 = L1.next;
                }
                else{
                    prev.next = L2;
                    prev = L2;
                    L2 = L2.next;
                }
            }   
        }
        return dummy.next;
    }
}

No comments:

Post a Comment