【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;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36269372/article/details/83621684