求兩個單向鍊錶的交點

2021-08-07 05:56:10 字數 865 閱讀 2218

題目:

給出兩個單向鍊錶,判斷其是否有交點;如果存在交點,請找出交點

解題思路:

如果存在交點,則兩個鍊錶的節點結構必定是同構的;

如果存在交點,則兩個鍊錶必定程式y字形,而不可能是x形;

如果存在交點,兩個鍊錶在交點及其之後的部分是一致的-----這點很關鍵,一致的意思包括兩部分:長度和內容。

基於以上三點,可以給出如下解題演算法

解題演算法:

[cpp]view plain

copy

struct

node  

;  node* fixintersetion(node* phead1, node* phead2)  

//獲取鍊錶長度

while

(p1->next != null)  

while

(p2->next != null)  

//開始判斷是否存在交點

if(p1 != p2)  

else

//否則尋找第乙個相同的節點

}  if(i

}  //開始比對,得出交點

while

(p1 != p2)  

return

p1;  

}  }  

解題總結:

附:判斷單鏈表是否存在環

[cpp]view plain

copy

bool

fixring(node * phead)  

return

! (pfast == null || pfast -> next == null);  

}  

求兩個交叉鍊錶的交點

如果兩個鍊錶相交,又都不存在環,那麼從第乙個相交點開始之後的結點都相同 構成了乙個y型 因此,只要分別遍歷這兩個鍊錶,找到末尾結點,如果末尾結點相同,即可確認相交。如果要求這種情況的交點,由於相交部分全部都相同,所以彼此的長度差異存在於相交之前的部分。因此,只需要先得到兩個鍊錶的差d,然後將較長的鍊...

C Python 求兩個鍊錶的交點

已知鍊錶a的頭節點指標heada,鍊錶b的頭節點指標headb。兩個鍊錶相交,求兩鍊錶交點對應的節點 如果兩個鍊錶沒有交點,則返回null 在求交點的過程中,不可以破壞鍊錶的結構或者修改鍊錶的資料域 可以確保傳入的鍊錶a與鍊錶b沒有任何環 實現演算法盡可能時間複雜度o n 空間複雜度o 1 incl...

C 求兩個鍊錶的交點

int main int b lenb for int i 0 i lena i for int i 0 i lenb i return0 結果 b 3 3 in array a.b 4 1 in array a.b 7 1 in array a.演算法寫在乙個類裡 class solution w...