1669. 合并两个链表
解题思路
从题意可知,我们只需要找到list1
中需要连接的左右两个节点即可。左节点是a前一个节点指向list2
的头,右节点是list2
的尾指向b的next。list1中去掉节点的个数是b - a + 1
个。
代码实现
public class Solution {
public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
ListNode head = list1;
// 循环前准备
b = b - a + 1;
a = a - 1;
// 找到开始下标的前一个节点
while (a-- > 0) {
list1 = list1.next;
}
ListNode last = list1;
// 找到结束节点
while (b-- > 0) {
list1 = list1.next;
}
// 拼接
last.next = list2;
while (null != list2.next) {
list2 = list2.next;
}
list2.next = list1.next;
return head;
}
}
复杂度分析
- 时间复杂度
O(n) + O(m)
- 空间复杂度
O(1)
。