leetcode 每日一题160. 相交链表
我的思路
链表!不知道用 JS 怎么处理链表,每日一题总能 get 到我的知识盲区。不会链表的我连思路都没有,哭哭。
官方题解
官方题解给了两种方法:
- 哈希集合
先遍历一遍 headA 的放入集合中,然后再遍历 headB,如果遍历到的 headB 在集合中存在的话,那么就是和 headA 的交点。
var getIntersectionNode = function (headA, headB) {
var set = new Set();
var temp = headA;
while (temp != null) {
set.add(temp);
temp = temp.next;
}
temp = headB;
while (temp != null) {
if (set.has(temp)) {
return temp;
}
temp = temp.next;
}
return null;
};
- 双指针
一个指针指向 headA,另一个指针指向 headB。
_ 先判断是否有一个链表为空,如果有一个链表为空,那么不可能相交。
_ 都不空的时候,两个指针分别指向头节点,然后两个指针依次遍历两个链表的每个节点。 * 如果指针不为空,则指针移到下一个节点;如果指针为空,那么指针移到另一个链表的头节点。当两个指针指向同一个节点或者都为空时返回。
var getIntersectionNode = function (headA, headB) {
var pA = headA,
pB = headB;
if (pA == null || pB == null) return 0;
while (pA != pB) {
pA = pA == null ? headB : pA.next;
pB = pB == null ? headA : pB.next;
}
return pA;
};
总结
今天稍微学习了一下 JS 的链表