两个链表的第一个公共结点
题目描述
输入两个链表,找出它们的第一个公共结点。
首先遍历俩个链表得到它们的长度,以及长的链表多几个结点。在第二次遍历的时候,在较长的链表先走长度之差步,接着再同时在俩个链表遍历,找到的第一个相同的结点就是她们的第一个公共结点
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: int length(ListNode *head){ ListNode *p=head; int l=0; while(p!=NULL) { p=p->next; l++; } return l; } ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { int len1=length(pHead1); int len2=length(pHead2); int d; ListNode *p=pHead1; ListNode *q=pHead2; if(len1>len2){ d=len1-len2; while(d--) p=p->next; } else{ d=len2-len1; while(d--) q=q->next; } while(p!=q&&p!=NULL&&q!=NULL){ p=p->next; q=q->next; } ListNode *head=p; return head; } };