相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。

图示两个链表在节点 c1 开始相交:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

相交链表

map

遍历第一个,全存起来,再遍历第二个,去map里查有没有重复的。空间利用率非常不行

双指针

声明两个指针指向两个链表头,开始往后遍历

思路 两个指针都一起往后走,如果两个指针指向了相同节点,就返回这个节点,如果有一个先走到头了,就回过头指向另一条链表的头,往后走,这样如果两个链表相交,两个指针总能指到一起去,若不相交,就会一起变成null,然后返回null就好了

  • 相交的情况:

    • 若相交节点前的不相交节点数一样,那就很轻松走到一起了

    • 不一样:例如示例中,我们用指针p1,p2分别指向headA,和headB。

​ p1走到c1的时候,p1走到了b3,然后p1走到c3的时候,p2走到了c2,然后,p1指向b1,p2走到c3,下一步让p2走到a1,这时p1在b2,2步后,同时走到c1

​ 普遍情况:相交部分c个节点,不相交部分节点数分别为a,b,p1走过a+c+b个节点到达相交节点,p2走过b+c+a个节点后到达相交节点。

  • 不相交的情况;

    • 长度一样,一起走到头
    • 长度不一样,一个为m,一个为n,还像上面那样走,p1和p2都会走m+n个节点,一起走到null,这是p1=p2,返回null

总结,这道题就是利用路程相等来做。

posted @ 2021-09-11 21:58  博客是个啥?  阅读(34)  评论(0编辑  收藏  举报