原题链接:
https://leetcode.cn/problems/merge-in-between-linked-lists/
解题思路:
- 注意该题传入的
a
和b
是链表的索引,而不是节点的值 - 先遍历
list1
,找到a-1
和b+1
节点 - 将
a-1
的next
指向list2
的头节点 - 在将
list2
的尾节点的next
指向b+1
节点 - 返回
list1
,此时它为新链表
/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val = (val===undefined ? 0 : val)* this.next = (next===undefined ? null : next)* }*/
/*** @param {ListNode} list1* @param {number} a* @param {number} b* @param {ListNode} list2* @return {ListNode}*/
var mergeInBetween = function(list1, a, b, list2) {let start = null // 存储连接list2的起点,即a-1节点let end = null // 存储list2终点的节点,即b+1节点let prev = new ListNode(null, list1) // 创建一个虚拟节点,它连接着list1的起点let node = list1 // 用node遍历list1链表,查找a和b节点let index = 0 // 记录链表的索引// 遍历list1,查找start和endwhile (node) {// 当index === a时,它的上一个节点prev就是a-1节点if (index === a) {start = prev}// 当index - 1 === b时,当前节点即为b+1节点if (index - 1 === b) {end = nodebreak}// 每次循环索引加1index++// 每次循环,prev和node都向前移动一位prev = nodenode = node.next}// 将start连接到list2的头节点start.next = list2// 不断循环查找到list2的尾节点while (list2.next) {list2 = list2.next}// 将list2的尾节点连接到endlist2.next = end// 返回新链表return list1
};