合并两个有序链表

87 阅读1分钟

合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

这里输入的是链表,1,2,4是每个节点的值

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]
  • 提示:

    • 两个链表的节点数目范围是 [0, 50]
    • -100 <= Node.val <= 100
    • l1l2 均按 非递减顺序 排列

来源:力扣(LeetCode) 链接:leetcode.cn/problems/me…

题解

解法

public class Demo {
    public static void main(String[] args) {
        ListNode list1 = new ListNode(1,new ListNode(2,new ListNode(4,null)));
        ListNode list2 = new ListNode(1,new ListNode(3,new ListNode(4,null)));
        ListNode demo = demo(list1, list2);
        while (demo != null){
            System.out.print(demo.val +"\t");
            demo = demo.next;
        }
    }
​
    public static  ListNode demo(ListNode list1, ListNode list2){
        if(list1 == null && list2 == null){
            return null;
        }
        return dg(list1, list2, new ListNode());
    }
​
    public static ListNode dg (ListNode list1, ListNode list2,ListNode listNode){
        if(list1 == null && list2 == null){
            return null;
        }
        if(list1 == null){
            return list2;
        }else if(list2 == null){
            return list1;
        }
        if(list1.val > list2.val){
            listNode.val = list2.val;
            list2 = list2.next;
        }else{
            listNode.val = list1.val;
            list1 = list1.next;
        }
        listNode.next = dg(list1,list2,new ListNode());
        return listNode;
    }
​
}
​
class ListNode {
     int val;
     ListNode next;
     ListNode() {}
     ListNode(int val) { this.val = val; }
     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
​

\