題目:給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o(1)時間刪除該結點。
鍊錶結點與函式的定義如下:
1分析:如下圖所示,假設要刪除的結點為p結點,若直接刪除p結點,則必須知道p的上乙個結點,而查詢p的上乙個結點的時間複雜度為o(n)。可以交換p和p的下乙個結點q的資料,然後直接刪除q,這樣便保證了時間複雜度為o(1)。需要注意的是p為尾結點的情況。這時只能順序遍歷鍊錶並完成刪除操作。struct
listnode
2;
ps:上述**存在乙個問題,因為它基於乙個假設:要刪除的結點的確在鍊錶中。我們需要o(n)的時間才能判斷鍊錶中是否包含某一結點。
受到o(1)時間的限制,我們不得不把確保結點在鍊錶中的責任推給了函式的呼叫者。在面試的時候,可以和面試官討論這個假設,以便讓面試官覺得我們考慮問題非常全面。
面試題13 在O 1 時間刪除鍊錶結點
題目 給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 struct listnode 在單向鍊錶中刪除乙個結點,最常規的方法是從頭到尾掃瞄一遍找到結點,然後刪除結點。對於給定的是值得結點,沒有辦法只能從頭到尾掃瞄乙個乙個對比值得大小,如果鍊錶中存在...
面試題13 在O 1 時間刪除鍊錶結點
面試題13 題目 給定單向鍊錶的頭指標和乙個指標結點,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 struct listnode void deletenode listnode plisthead,listnode ptobedeleted 常規的做法是從頭結點開始順序查詢到要...
面試題13 在O 1 時間刪除鍊錶結點
題目 給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 struct listnode void deletenode listnode plisthead,listnode ptobedeleted 刪除結點的操作我們經常碰到,比如乙個鍊錶a b ...