題目:輸入兩個鍊錶,找出他們的第乙個公共結點;
思路:公共結點是指結點值相同,結點指向的下乙個結點也相同。如果下乙個結點也相同,那麼下乙個結點的值記憶下乙個結點指向的結點也相同。即,從此公共結點開始,兩個鍊錶相遇,且之後的結點都是相同的,也就是重合了。(因為結點位址相同,結點值相同,指向的下乙個節點的位址也相同)。也就是說:如果有兩個結點指標,p1 == p2,這句話意味著兩個鍊錶從此結點開始及其之後的所有結點都是相同的了。
所以,首先計算兩個鍊錶的長度,定義兩個指標分別指向兩個鍊錶的頭結點,然後讓較長的鍊錶指標先走幾步,事剩下的長度與較短鍊錶相同,然後開始找公共結點,判斷兩個結點是否相同,不相同則同時繼續往後走,相同則返回次結點。
/*
struct listnode
};*/
class solution
}else
}while(p1)
}return p1;
}int findlen(listnode* root)
return count;
}};
36 兩個鍊錶的第乙個公共結點
時間限制 1秒 空間限制 32768k 本題知識點 鍊錶 題目描述 include using namespace std struct listnode 方法一 先對齊結尾後,從前往後比較結點 class solution while p2 對齊尾部,從短的頭部開始比較 p1 phead1 p2 ...
36 兩個鍊錶的第乙個公共結點
因為兩個鍊錶不一定等長,所以先求出兩個鍊錶的長度。然後求差x,較長的鍊錶先走x部,然後開始比較兩個鍊錶,當遇到相同的結點則返回,一直未遇到則返回null public class listnode public class solution while l2 null if count1 count...
36 兩個鍊錶的第乙個公共結點
輸入兩個鍊錶,找出它們的第乙個公共結點。leetcode對應題目 160.相交鍊錶 題目解答 總結 沒什麼難度,計算出兩個鍊錶長度,分別移動就可以了。還想到一種用set的性質來做,反正兩者有乙個公共節點,就是重合部分,把list1全部新增到set,再在set中查詢list2的每個結點。不過感覺不如解...