1. 程式人生 > >散列表雙鏈表處理衝突刪除操作O(1)

散列表雙鏈表處理衝突刪除操作O(1)

這兩天在看演算法導論散列表的時候,遇到一個問題,為何採用雙鏈表處理衝突的刪除操作只需O(1),後來發現刪除操作的輸入是x,而不是k,x是指向一片記憶體區域的指標,這片記憶體區域用來存放k以及相關資訊。
對於單鏈表,比如現在我們要刪除k2,對應的指標暫定為x2,假設其前驅k1,對於指標x1,刪除k2時,其實我們現在知道的資訊也就是x1->next = x2,但是我們沒有x1,所以我們無法改變x1->next,只是知道它等於x2而已,所以單鏈表必須得從頭來,跟查詢操作一個意思了就(查詢操作的輸入是k,不是x),所以為了刪除方便,還是用雙鏈表比較好,就比如上例,通過x2,可以找到x1和後繼(假設是x3),只需改變x1和x3的相應的指標域即可。這大概就是我的理解,所以在此記錄一下。