零 標題:演算法(leetcode,附思維導圖 + 全部解法)300題之(160)相交連結串列
一 題目描述
二 解法總覽(思維導圖)
三 全部解法
1 方案1
1)程式碼:
// 方案1 “自己。雜湊法(JS裡的Map資料結構)”。
// 思路:
// 1)狀態初始化:resMap = new Map(), resNode = null; 。
// 2)核心1:遍歷 連結串列A ,將每個節點存入 雜湊resMap 中。
// 3)核心2:遍歷 連結串列B 。
// 3.1)若 當前節點是否存在於 雜湊resMap 中,則 resNode 置為當前節點 並 退出遍歷。
// 4)返回結果 resNode 。
var getIntersectionNode = function(headA, headB) {
// 1)狀態初始化:resMap = new Map(), resNode = null; 。
let resMap = new Map(),
resNode = null;
// 2)核心1:遍歷 連結串列A ,將每個節點存入 雜湊resMap 中。
while (headA) {
resMap.set(headA, 1);
headA = headA.next;
}
// 3)核心2:遍歷 連結串列B 。
while (headB) {
// 3.1)若 當前節點是否存在於 雜湊resMap 中,則 resNode 置為當前節點 並 退出遍歷。
if (resMap.has(headB)) {
resNode = headB;
break;
}
headB = headB.next;
}
// 4)返回結果 resNode 。
return resNode;
}
2 方案2
1)程式碼:
// 方案2 “雙指標法。”。
// 參考:
// 1)https://leetcode.cn/problems/intersection-of-two-linked-lists/solution/xiang-jiao-lian-biao-by-leetcode-solutio-a8jn/
// 思路:
// 1)每步操作需要同時更新指標 pA 和 pB。
// 2)若 指標 pA 不為空,則 將指標 pA 移到下一個節點;若 指標 pB 不為空,則 將指標 pB 移到下一個節點。
// 3)若 指標 pA 為空,則 將指標 pA 移到連結串列 headB 的頭節點;若 指標 pB 為空,則 將指標 pB 移到連結串列 headA 的頭節點。
// 4)若 當指標 pA 和 pB 指向同一個節點 或 都為空時,則 返回它們指向的節點 或 null 。
var getIntersectionNode = function(headA, headB) {
let pA = headA, pB = headB;
while (pA !== pB) {
pA = pA === null ? headB : pA.next;
pB = pB === null ? headA : pB.next;
}
return pA;
}
四 資源分享 & 更多
1 歷史文章 - 總覽
2 博主簡介
碼農三少 ,一個致力於編寫 極簡、但齊全題解(演算法) 的博主。
專注於 一題多解、結構化思維 ,歡迎一起刷穿 LeetCode ~