1. 程式人生 > >【LeetCode】21 合併兩個有序連結串列

【LeetCode】21 合併兩個有序連結串列

將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4


解題思路:
1 先根據兩個連結串列的第一個節點判斷並建立result的頭結點。
2 對兩個連結串列同時遍歷,判斷兩個連結串列的當前元素的大小,將小的接在result後面,直到兩個連結串列中的一個或兩個到了連結串列尾
3 判斷是否是還有一個連結串列中還有元素,若有,直接接在result後面。

// public class ListNode {
//     int val;
//     ListNode next;
//     ListNode(int x) { val = x; }
// }
class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode p = l1;
        ListNode q = l2;
        ListNode result;
        ListNode r;
        
        if (l1 == null && l2 == null)
            return null;
        if (l1 == null)
            return l2;
        if (l2 == null)
            return l1;
        
        if (p.val <= q.val){
            result = new ListNode(p.val);
            r = result;
            p = p.next;
        }
        else{
            result = new ListNode(q.val);
            r = result;
            q = q.next;
        }


        while (p != null && q != null){
            while (p != null && q != null && p.val <= q.val){
                r.next = p;
                r = r.next;
                p = p.next;
            }
  
            while (p != null && q != null && q.val <= p.val){
                r.next = q;
                r = r.next;
                q = q.next;
            }
                        
        }
        if (q == null)
            r.next = p;
        else r.next = q;
        
        return result;
    }
}