Map中環路檢測

2021-08-21 21:00:28 字數 719 閱讀 3996

map是一種鍵值對的集合,因為鍵值在使用時很有可能呼互換,比方說鍵k1對應的值時v1,然而v1又能作為鍵,而之前的k1將會作為k1對應的值,就產生了環路了,在很多情況下。產生環路可能會使程式無休止的執行下去造成嚴重後果,因此需要檢測環路產生,當新插入的鍵值對會使原先的map產生環路,就拒絕這次插入

環路檢測有很多種做法,我最喜歡的一種是:

當存在環路時必然是有(k1,v1)存在且(v1,k1)存在,

因此:protected void checkforaliascircle(string name, string alias)

}因此接下來就是分析方法如何找到(k1,v1)存在

public boolean hasalias(string name, string alias) 

entry = (entry)var3.next();

registeredname = (string)entry.getvalue();

} while(!registeredname.equals(name));

string registeredalias = (string)entry.getkey();

return registeredalias.equals(alias) || this.hasalias(registeredalias, alias);

}

使用遞迴解決,**邏輯清晰,且可高度復用

**出自spring,

2 8 環路檢測

template typename t singlylinkednode findloopfirst singlylinkednode head advance slow and fast pointers s s getnext f f getnext getnext if s f reset s...

鍊錶環路檢測

給定乙個有環鏈表,實現乙個演算法返回環路的開頭節點。有環鏈表的定義 在鍊錶中某個節點的next元素指向在它前面出現過的節點,則表明該鍊錶存在環路。鍊錶有環理解 如果鍊錶中有環,那麼快慢指標就一定可以相遇,此時快指標移動的距離是慢指標的兩倍題解 1.檢測有沒有環,使用快慢指標slow和fast 一次走...

演算法之鍊錶環路檢測

問題描述 給定乙個有環鏈表,實現乙個演算法返回環路的開頭節點。有環鏈表的定義 在鍊錶中某個節點的next元素指向在它前面出現過的節點,則表明該鍊錶存在環路。示例 1 輸入 head 1,2,3,4 pos 1 輸出 tail connects to node index 1 解釋 鍊錶中有乙個環,其...