1.题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 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
均按 非递减顺序 排列
2.核心代码
// @solution-sync:begin
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if (list1 == null) {
return list2;
} else if (list2 == null) {
return list1;
} else if (list1.val < list2.val) {
list1.next = mergeTwoLists(list1.next, list2);
return list1;
} else {
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
}
}
ListNode list=new ListNode() 初始化一个空节点,无值,不提倡此种写法。
ListNode list=new ListNode(0) 初始化一个节点值为0的空节点,最常用最正规写法
ListNode list=null 为空,什么都没有,一般不这么写;
// @solution-sync:begin
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode dummyHead = new ListNode(0);
ListNode cur = dummyHead;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
cur.next = list1;
cur = cur.next;
list1 = list1.next;
}else {
cur.next = list2;
cur = cur.next;
list2 = list2.next;
}
}
if (list1 == null) {
cur.next = list2;
} else {
cur.next = list1;
}
return dummyHead.next;
}
}
3.测试代码
import java.lang.StringBuilder;
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
// @solution-sync:begin
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode dummyHead = new ListNode(0);
ListNode cur = dummyHead;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
cur.next = list1;
cur = cur.next;
list1 = list1.next;
}else {
cur.next = list2;
cur = cur.next;
list2 = list2.next;
}
}
if (list1 == null) {
cur.next = list2;
} else {
cur.next = list1;
}
return dummyHead.next;
}
}
// @solution-sync:end
class Main {
public static void main(String[] args) {
ListNode list1 = parseListNode(new int[]{1, 2, 4});
ListNode list2 = parseListNode(new int[]{1, 3, 4});
ListNode result = new Solution().mergeTwoLists(list1, list2);
System.out.println(toString(result));
}
private static ListNode parseListNode(int[] values) {
ListNode head = null;
ListNode tail = null;
for (int value : values) {
ListNode node = new ListNode(value);
if (head == null)
head = node;
else
tail.next = node;
tail = node;
}
return head;
}
private static String toString(ListNode h) {
StringBuilder buf = new StringBuilder();
buf.append("[");
ListNode c = h;
while (c != null) {
buf.append(c.val);
if (c.next != null)
buf.append(",");
c = c.next;
}
buf.append("]");
return buf.toString();
}
}