合并两个链表
题目描述:
给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。
请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。
下图中蓝色边和节点展示了操作后的结果:
链接:
1669. 合并两个链表 - 力扣(LeetCode) (leetcode-cn.com)
解题思路
思路一
1. 新建哑节点,便于返回;
2. 分别找到下标为a - 1、b + 1的节点标记为prev, curr;
3. prev的next指向list2,list2的尾节点next指向curr
/**
* @param {ListNode} list1
* @param {number} a
* @param {number} b
* @param {ListNode} list2
* @return {ListNode}
*/
var mergeInBetween = function (list1, a, b, list2) {
var dummy = new ListNode(0, list1);
var prev,
curr = list1;
for (var i = 1; i <= a; i++) {
prev = curr;
curr = curr.next;
}
for (var j = a; j <= b; j++) {
curr = curr.next;
}
var tail = list2;
while (tail.next != null) {
tail = tail.next;
}
prev.next = list2;
tail.next = curr;
return dummy.next;
};
时间复杂度: O(b + m)
空间复杂度: O(1)