输入两个链表,找出它们的第一个公共结点

来源:互联网 发布:网络架构师下载 编辑:程序博客网 时间:2024/05/17 23:34

      从链表的定义可以看出,这两个链表是单链表,如果两个链表有公共节点,那么这两个链表从某一节点开始,它们的m_pNext都指向同一个节点,之后它们所有的节点都是重合的,不可能再出现分叉。所以拓扑形状看起来是Y型。如下图所示:


 ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) {        ListNode *p1 = pHead1;        ListNode *p2 = pHead2;        while(p1!=p2){            p1 = (p1==NULL ? pHead2 : p1->next);            p2 = (p2==NULL ? pHead1 : p2->next);        }        return p1;    }


      上述算法说明:两个指针第一次遍历经没有汇合,但第二次会同时到达汇合点,因为两个指针都走过了非重合部分(1 2 3 4 5),最终在6点汇合,返回地址即可。

阅读全文
0 0
原创粉丝点击