一、题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 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
均按 非递减顺序 排列
二、思路分析
通过迭代的方式,比较 list1 和 list2 两个链表的头节点的值谁更小,将值较小的添加到结果链表中,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。
三、代码参考
1、Java
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
// 创建一个虚拟节点,用来将 list1、list2 的节点按顺序连接起来
ListNode virtual = new ListNode(-1);
// 设置一个指针,指向虚拟节点
ListNode virtualPre = virtual;
// 循环调节为:list1、list2 任意一个链表没数据后将结束循环
while(list1 != null && list2 != null){
// 判断 list1、list2 的值哪个比较大
if(list1.val <= list2.val){
// 将 virtualPre.next 指向小的值
virtualPre.next = list1;
// list1 指针右移
list1 = list1.next;
}else {
// 将 virtualPre.next 指向小的值
virtualPre.next = list2;
// list2 指针右移
list2 = list2.next;
}
// virtualPre 指针右移
virtualPre = virtualPre.next;
}
// 如果是 list1 链表的值先没有,则将 list2 链表中的数据全部加进去,反之
virtualPre.next = list1 == null ? list2 : list1;
// 返回结果
return virtual.next;
}
}
2、Python
class Solution(object):
def mergeTwoLists(self, list1, list2):
# 创建一个虚拟节点,用来将 list1、list2 的节点按顺序连接起来
virtual = ListNode(-1)
# 设置一个指针,指向虚拟节点
virtualPre = virtual
# 循环调节为:list1、list2 任意一个链表没数据后将结束循环
while list1 and list2:
# 判断 list1、list2 的值哪个比较大
if list1.val <= list2.val:
# 将 virtualPre.next 指向小的值
virtualPre.next = list1
# list1 指针右移
list1 = list1.next
else:
# 将 virtualPre.next 指向小的值
virtualPre.next = list2
# list2 指针右移
list2 = list2.next
# virtualPre 指针右移
virtualPre = virtualPre.next
# 如果是 list1 链表的值先没有,则将 list2 链表中的数据全部加进去,反之
virtualPre.next = list1 if list1 is not None else list2
# 返回结果
return virtual.next