隱含條件:兩個鍊錶的公共結點後的結點一定相同,因為公共結點只有乙個指向後面結點的指標,不可能兩條鍊錶相交後又會分叉。
思路1:遍歷兩條鍊錶,找到較長的一條,記為l,長度記為l1;較短的一條記為s,長度為s1;讓較長的一條先走l1-s1,然後兩條一起走,直到結點相同返回或鍊錶尾時返回空。
思路2:用兩個棧,分別將兩條鍊錶依次入棧,再同時出棧,直到兩個出棧的結點不相等,返回前乙個相等的結點。
思路3:雜湊表,將第乙個鍊錶所有結點放入乙個集合,然後依次檢視第二條鍊錶的結點是否在集合中,返回第乙個成功查詢的結點。
思路4:思路1的變種。主要還是找到長度差。長的鍊錶長度設為a+n,短的鍊錶長度設為b+n,n為第乙個公共結點後的相同結點個數。短鍊表指標到達尾後,指向長鍊表的第乙個元素,長鍊表指標到達尾後,指向短鍊表的頭,直到兩個指標指向相等返回,否則返回空。
思路4**:
# -*- coding:utf-8 -*-
# class listnode:
# def __init__(self, x):
# self.val = x
# self.next = none
class
solution:
deffindfirstcommonnode
(self, phead1, phead2):
# write code here
p1,p2=phead1,phead2
while p1!=p2:
p1=p1.next if p1 else phead2
p2=p2.next if p2 else phead1
return p1
劍指offer 兩個鍊錶第乙個公共結點
題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。解題思路 用兩重迴圈,對第乙個鍊錶的每乙個結點都進行第二個鍊錶所有結點的遍歷,若發現結點相等,則將結點返回 public listnode findfirstcommonnode listnode phead1,listnode phead2 phe...
劍指offer 兩個鍊錶的第乙個公共結點(鍊錶)
輸入兩個鍊錶,找出它們的第乙個公共結點。公共節點指的是節點的指標相同 節點本身相同 而不是節點的內容相同。如果考慮暴力的方法,對於鍊錶1的每個元素,去遍歷鍊錶2,找出第乙個公共節點,這樣時間複雜度為o mn 計算開銷大 m,n分別為兩個鍊錶的長度 考慮具有公共節點的鍊錶的特徵 如果兩個鍊錶有公共節點...
劍指offer 兩個鍊錶的第乙個公共節點
題目延伸 程式設計之美中的求兩個節點是否相交 將兩個節點串在一起,若有節點,串在一起的節點就會出現環,利用一二不長不等,兩個節點在環中必然相遇。本題描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 乙個簡單的方法是 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾...