题目
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
示例
输入: l1 = [1,2,4], l2 = [1,3,4]
输出: [1,1,2,3,4,4]
递归
主要思路
1. 首先递归的终止条件是当两个链表分别为null时,
2. l1为空时,因为需要合并链表,所以返回l2
3. l2为空时,返回l1
4. 然后判断当前节点值的大小,构建新链表
递归代码
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
if(l1.val <= l2.val){
l1.next = mergeTwoLists(l1.next,l2);
return l1;
}else{
l2.next = mergeTwoLists(l1,l2.next);
return l2;
}
}
迭代
主要思路
1. 通过创建一个虚拟的头节点来构建新链表
2. 遍历l1和l2所以节点
3. l1节点的值比l2节点值小时,将l1节点连接到新链表上
4. l2节点的值比l1节点值小时,将l2节点连接到新链表上
5. 最后判断链表l1是否还有节点
迭代代码
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode dummty = new ListNode(0)
ListNode tail = dummty
while(l1 != null && l2 != null){
if(l1.val < l2.val){
//连接到虚拟头结点的链表上
tail.next = l1
l1 = l1.next
}else{
//连接到虚拟头结点的链表上
tail.next = l2
l2 = l2.next
}
tail = tail.next
}
//此时有可能两个链表其中有剩余节点
tail.next = l1 == null? l2 : l1
return dummty.next
}