栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

acwing----- 66.两个链表的第一个公共结点

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

acwing----- 66.两个链表的第一个公共结点

原题链接—acwing

思路:

1. 两个指针终会相遇,就算一个指针跑的快,他最后也会停下来,等待下一个指针赶上 ,所以如果有公共点,那么一定会相遇,即使第一遍扫描的时候错过去了那个公共的节点,最后从对方的链表再次扫描的时候,到达链表尾部的时候还是会扫描到那个节点,因为走的路径一样,肯定同时遍历完链表。这里其实不好想,自己画图走一遍试试就好了。
2. 两个指针走的总路线是一样的
3. 如果2个链表没有相同的部分,指针都会在链表的尾部的空指针处停下来,然后返回空

图示:总路程是一样的

 //两个指针终会相遇,就算一个指针跑的快,他最后也会停下来,等待下一个指针赶上
 //两个指针走的总路线是一样的
 //如果2个链表没有相同的部分,指针都会在链表的尾部的空指针处停下来,然后返回空
class Solution {
public:
    ListNode *findFirstCommonNode(ListNode *headA, ListNode *headB) {
        auto p = headA,q = headB;
        while(p!=q){//两个指针一起开始走,把2个链表同时遍历一遍,走相同的路径
    //如果p为空了,那就转到headB开始走,如果链表非空,那就走到p的下一个节点
            p = p ? p->next:headB;
            q = q ? q->next:headA;//同理
        }
        return q;//找到的p和q就是相同部分的头结点
        
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/289457.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号