本題最大的要求是 在時間複雜度為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...