1. 程式人生 > >兩個鏈表的第一個公共節點

兩個鏈表的第一個公共節點

pre pan spa scribe ++ || listnode desc des

題目描述

輸入兩個鏈表,找出它們的第一個公共結點。 思路:先分別求出兩個鏈表的長度m,n。長的那個鏈表先走m-n步(假設m>=n),然後同時走,碰到相同節點即為第一個公共節點,時間復雜度為O(m+n)
 1 class Solution {
 2 public:
 3     int getLength(ListNode *pHead)
 4     {
 5         int count=0;
 6         while(pHead)
 7         {
 8             ++count;
 9             pHead=pHead->next;
10 } 11 return count; 12 } 13 ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { 14 if(pHead1==NULL || pHead2==NULL)return NULL; 15 int length1=getLength(pHead1); 16 int length2=getLength(pHead2); 17 while(length1>length2)
18 { 19 pHead1=pHead1->next; 20 --length1; 21 } 22 while(length2>length1) 23 { 24 pHead2=pHead2->next; 25 --length2; 26 } 27 while(pHead1 && pHead2) 28 { 29 if
(pHead1==pHead2)return pHead1; 30 pHead1=pHead1->next; 31 pHead2=pHead2->next; 32 } 33 return NULL; 34 } 35 };

兩個鏈表的第一個公共節點