合并有序链表
题目
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
LeetCode:合并有序链表
示例 1:
输入: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
l1 和 l2 均按 非递减顺序 排列
代码:
package com.itdfq.algorithm;
import java.util.ArrayList;
import java.util.List;
/**
* @author: GodChin
* @date: 2022/3/17 11:36
* @mark:
*/
public class Demo1 {
public static void main(String[] args) {
Node node1 = new Node(1, new Node(2, new Node(4, null)));
Node node2 = new Node(1, new Node(3, new Node(4, null)));
// Node merge = merge(node1, node2);
Node merge = mergeTwoLists(node2, node1);
List<Integer> list = getList(merge);
System.out.println(list);
}
public static List<Integer> getList(Node node) {
List<Integer> list = new ArrayList<>();
while (node != null) {
list.add(node.val);
node=node.next;
}
return list;
}
public static Node mergeTwoLists(Node list1, Node list2) {
if (list1 == null) {
return list2;
}
if (list2 == null) {
return list1;
}
if (list1.val < list2.val) {
list1.next = mergeTwoLists(list1.next, list2);
return list1;
} else {
list2.next = mergeTwoLists(list2.next, list1);
return list2;
}
}
}
class Node {
int val;
Node next;
Node() {
}
Node(int val) {
this.val = val;
}
Node(int val, Node next) {
this.val = val;
this.next = next;
}
}