题目详情
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例 2:
输入:l1 = [], l2 = []
输出:[]
Java代码(排序)
public ListNode mergeTwoLists(ListNode linked1, ListNode linked2) {
//下面4行是空判断
if (linked1 == null)
return linked2;
if (linked2 == null)
return linked1;
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
while (linked1 != null && linked2 != null) {
//比较一下,哪个小就把哪个放到新的链表中
if (linked1.val <= linked2.val) {
curr.next = linked1;
linked1 = linked1.next;
} else {
curr.next = linked2;
linked2 = linked2.next;
}
curr = curr.next;
}
//然后把那个不为空的链表挂到新的链表中
curr.next = linked1 == null ? linked2 : linked1;
return dummy.next;
}
总结
首先先判断两个链表是否为空,如果有一个为空,那么返回另一个。如果都不为空那么新建一个Node作为新链表的起点,并复制一个dummy Node给curr,这是因为在算法结束后可以返回新链表的头节点。然后如果两个节点不为空,那么就判断两个节点哪个小,并将小的值存到curr的下个节点,然后让curr向前走一步,最后再将那个不为空的链表挂到新的链表中