输入两个链表,找出它们的第一个公共节点。
如下面的两个链表:
在节点 c1 开始相交。
思路一:将其中一个链表的所有节点存入哈希表中。遍历另一个链表的时候查看当前节点是否已出现在哈希表中。
思路二:先求出两个链表的长度,使其从相同位置开始出发,同时遍历两个节点。如上图A从a1出发,B从b2出发。
思路三:双指针法,p1遍历A,p2遍历B,谁先结束谁就又从另一个链表的头部开始遍历,直到相遇(类似快慢指针)https://leetcode-cn.com/problems/liang-ge-lian-biao-de-di-yi-ge-gong-gong-jie-dian-lcof/solution/shuang-zhi-zhen-fa-lang-man-xiang-yu-by-ml-zimingm/
你变成我,走过我走过的路。
我变成你,走过你走过的路。
然后我们便相遇了…
代码:
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *node1 = headA;
ListNode *node2 = headB;
while (node1 != node2) {
node1 = node1 != NULL ? node1->next : headB;
node2 = node2 != NULL ? node2->next : headA;
}
return node1;
}
};