160、相交链表 | 算法(附思维导图 +全部解法)300题
零 标题:算法(********,附思维导图 + 全部解法)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://********.cn/problems/intersection-of-two-linked-lists/solution/xiang-jiao-lian-biao-by-********-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 博主简介
码农三少 ,一个致力于编写 极简、但齐全题解(算法) 的博主。
专注于 一题多解、结构化思维 ,欢迎一起刷穿 ******** ~