劍指offer13 在O 1 時間刪除鍊錶結點

2021-07-30 18:32:28 字數 597 閱讀 2789

題目:在給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o(1)時間內刪除該節點。鍊錶的結點定義如下:

struct listnode ;

要分析幾種情況:

1.空鍊錶

2.只有乙個結點

3.刪除的結點是尾結點

void deletenode(listnode *pnode,listnode *pdeleted)  

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

else

if(pnode == pdeleted)

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

else

p->next =

null;

delete pdeleted;

pdeletd =

null;

} }}

總結:對於n-1個非尾結點而言,我們可以在o(1)時把下乙個節點的記憶體複製覆蓋要刪除的結點,並刪除下乙個節點;對於尾結點而言,由於仍要順序查詢到尾結點的前面乙個節點,時間複雜度是o(n)。因此總的平均時間複雜度是[(n-1)*o(1) +o(n)]/n 結果還是o(1)

劍指offer 在O 1 時間刪除鍊錶結點

題目 給定單向鍊錶的頭指標和乙個指標,定義乙個函式在o 1 時間刪除該結點 class node public string getvalue public void setvalue string value public node getnext public void setnext node...

劍指offer 在O(1)時間刪除鍊錶節點

題目描述 給定單鏈表的頭結點和待刪除結點,在o 1 時間刪除鍊錶節點 class listnode 常規方法從煉表頭結點沿著鍊錶找到待刪除結點完成刪除操作。時間複雜度o n 可以將待刪除結點的下一結點內容複製到待刪除結點上,將待刪除結點的下一結點指向待刪除結點的的下一結點的下一結點。時間複雜度o 1...

劍指offer10 在O 1 時間刪除鍊錶結點

給定單向鍊錶的乙個節點指標,定義乙個函式在o 1 時間刪除該結點。假設鍊錶一定存在,並且該節點一定不是尾節點。樣例輸入 鍊錶 1 4 6 8 刪掉節點 第2個節點即6 頭節點為第0個節點 輸出 新鍊錶 1 4 8 注 單鏈表不能找到前驅節點,所以不能按常規方法將該節點刪除 可以換一種思路,將下乙個節...