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