鍊錶 刪除鍊錶的節點

2021-09-12 23:41:40 字數 858 閱讀 8048

劍指offer的乙個題,題目是要求在最少的時間內刪除鍊錶的節點。

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

複雜度分析:對於n-1個非尾節點,可以在o(1)時間內搞定,對於尾節點,需要順序查詢,時間複雜度為o(n),所以總的平均複雜度為[(n-1)xo(1)+o(n)]/n=o(1)。

struct listnode;

void deletnode(listnode** plisthead, listnode* ptobedeletd)

void deletnode(listnode** plisthead, listnode* ptobedeletd)

//要刪除的節點不是尾節點

if(ptobedeletd -> m_next!= nullptr)

delete pnext;

pnext = nullptr;//刪除要刪除節點的下乙個節點,並將其指標指向nullptr

//鍊錶只有乙個節點,刪除頭節點也是尾節點

else if(*plisthead == ptobedeletd)

//鍊錶中有多個節點,刪除尾節點

else

pnode->m_next = nullptr;

delete ptobedeletd;

ptobedeletd = nullptr;

}}

刪除鍊錶的節點 鍊錶操作

給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。注意 此題對比原題有改動 示例 1 輸入 head 4,5,1,9 val 5 輸出 4,1,9 解釋 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 1 9.示例 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...