刪除鍊錶的節點

2021-09-11 15:01:58 字數 1440 閱讀 8422

本題最大的要求是 在時間複雜度為o(1) 的要求內刪除 給出的節點

如按照 通常演算法 依次遍歷,找到 給定節點的前節點,時間複雜度為o(n) ,不符合要求

所以肯定不能遍歷鍊錶

思路:假設該節點p肯定在鍊錶內,那麼只用找到 該節點的後續節點q,將其賦值給當前結點,然後將p

指向q的下乙個節點 ,最後刪除q即可

但是,如果p在鍊錶尾部,只能依次遍歷了

**如下

/**

* */

/***

* @author 18071

* @date 2023年2月28日

* 功能: 一時間複雜度為 o(1) 刪除來目標中給定的鍊錶的節點!

***/

public class test

delete delete=new delete();

delete.de(head, l3);

system.out.println("delete 後 ");

while(head1!=null)

system.out.println("delete 尾節點 後 ");

delete.de(head11, l5);

while(head11!=null)

}

}class delete

else

//此時head 為p的前乙個節點

題目變種

**如下,主要時採用 快慢指標的思想

只要快指標和它後面的節點值相同,fast就一直往後 ,停止後 ,連線 slow 與fast 這樣就將 中間重複的 節點刪除了

《特別注意 ,此時 我沒有考慮 開頭就有 重複的可能 ,可以在開頭加入 乙個比較 如果slow 和fast相同 ,fast 一直向後,直到 fast.value !=fast.next.value , 最後 重新賦值 slow 和 fast 即可 確保開頭不是重複的 》

鍊錶 刪除鍊錶的節點

劍指offer的乙個題,題目是要求在最少的時間內刪除鍊錶的節點。問題分析 對於鍊錶的刪除,按照劍指offer的一貫思路就是展開討論 1 空鍊錶咋辦 待刪除的節點是空節點咋辦 2 要刪除的節點在鍊錶中的位置有三種情況 1 鍊錶只有乙個節點,待刪除節點是表頭又是尾節點 2 鍊錶有多個節點,待刪除的節點是...

刪除鍊錶節點

問題描述 給出單鏈表頭指標以及要刪除節點的位址,要求寫 刪除這個節點,並且時間複雜度為o 1 如何實現?分析 1 應變能力 2 對時間複雜度的理解 平常思路 prev next temp next free temp 但是該思路的時間複雜度為o n 解題 不能從phead開始找,入口在所要刪除的節點...

鍊錶刪除節點

define crt secure no warnings include include typedef struct linknode lk,lk 有頭鍊錶的初始化 lk initlinknode 初始化頭結點 headnode num 1 頭結點不維護資料域,這行 可寫可不寫 headnode...