原題鏈接:
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
};