题目描述:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
示例1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例2:
输入:l1 = [], l2 = []
输出:[]
示例3:
输入:l1 = [], l2 = [0]
输出:[0]
求解思路:
- 创建两个引用分别指向两个链表的第一个节点,比较其两个值的大小,将较小的尾插到新链表;
- 循环以上循环和尾插过程,直到其中某一链表到达null时,再将另一链表剩余部分插入到新链表的尾部。
代码实现:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//处理特殊情况
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
//1.创建引用及带傀儡节点的新链表
ListNode cur1 = l1;
ListNode cur2 = l2;
ListNode newHead = new ListNode(0);
ListNode newTail = newHead;
//2.循环比较将较小的插入新链表的尾部
while(cur1 != null && cur2 != null){
if(cur1.val < cur2.val){
newTail.next = cur1;
newTail = newTail.next;
cur1 = cur1.next;
}else{
newTail.next = cur2;
newTail = newTail.next;
cur2 = cur2.next;
}
}
//循环结束,即有一个链表已到达null,将另一链表插入结尾
if(cur1 == null){
newTail.next = cur2;
}else{
newTail.next = cur1;
}
return newHead.next;//返回除去傀儡节点的新链表
}
}
结果输出: