/** * 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和end while (node) { // 当index === a时,它的上一个节点prev就是a-1节点 if (index === a) { start = prev } // 当index - 1 === b时,当前节点即为b+1节点 if (index - 1 === b) { end = node break } // 每次循环索引加1 index++ // 每次循环,prev和node都向前移动一位 prev = node node = node.next } // 将start连接到list2的头节点 start.next = list2 // 不断循环查找到list2的尾节点 while (list2.next) { list2 = list2.next } // 将list2的尾节点连接到end list2.next = end
// 返回新链表 return list1};
评论