两个链表的第一个公共节点

Posted roscangjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个链表的第一个公共节点相关的知识,希望对你有一定的参考价值。

今天刷题碰到一个神仙解法,真是溜,记录一下:

长度相同有公共结点,第一次就遍历到;没有公共结点,走到尾部NULL相遇,返回NULL
长度不同有公共结点,第一遍差值就出来了,第二遍一起到公共结点;没有公共,一起到结尾NULL。

例如:当两个链表长度不同有公共节点时,bc+cd+ac = ac+cd+bc,所以第二遍时一定会一起到达公共节点

技术图片

 

/*
struct ListNode 
    int val;
    struct ListNode *next;
    ListNode(int x) :
            val(x), next(NULL) 
    
;*/

class Solution 
public:
    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;
    
;

 

以上是关于两个链表的第一个公共节点的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer两个链表的第一个公共结点

两个链表的第一个公共节点

两个链表的第一个公共节点

《剑指Offer——合并两个排序的链表,两个链表的第一个公共节点》代码

python 两个链表的第一个公共结点

剑指 Offer 52-两个链表的第一个公共节点