題目描述:
給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o(1)時間刪除該結點。
解題思路:
(1)常規思路:
在單向鍊錶中刪除乙個結點,最常規的做法無疑是從鍊錶的頭結點開始,順序遍歷查詢要刪除的結點,並在鍊錶中刪除該結點。這種思路由於需要順序查詢,時間複雜度自然就是o(n)。
(2)正確思路:
我們可以很方便地得到要刪除的結點的一下結點。因此,我們可以把下乙個結點的內容複製到需要刪除的結點上覆蓋原有的內容,再把下乙個結點刪除,就相當於把當前需要刪除的結點刪除了。
//刪除的節點是頭節點
else
//刪除的是尾節點
pnode-
>next =
null
;delete node;
node =
null;}
}};//左邊的測試案例,大家可以隨便測。
intmain()
system
("pause");
return0;
}
劍指offer 在O(1)時間刪除鍊錶節點
題目描述 給定單鏈表的頭結點和待刪除結點,在o 1 時間刪除鍊錶節點 class listnode 常規方法從煉表頭結點沿著鍊錶找到待刪除結點完成刪除操作。時間複雜度o n 可以將待刪除結點的下一結點內容複製到待刪除結點上,將待刪除結點的下一結點指向待刪除結點的的下一結點的下一結點。時間複雜度o 1...
劍指Offer 在O 1 時間內刪除鍊錶節點
思路 1 我們要刪除節點i,先把節點i的下乙個節點j的內容複製到i,然後把i的指標指向節點j的下乙個節點,因此刪除節點j 等同於刪除節點i 2 如果節點位於鍊錶的尾部,那麼只能從頭節點開始遍歷並刪除 3 如果只有乙個節點時,刪除節點之後,還需要把鍊錶的頭節點設定為null 時間複雜度分析 對於n 1...
O 1 刪除鍊錶節點 刪除鍊錶中的重複節點
o 1 刪除鍊錶節點 實現 void deletenode listnode plist,listnode ptobedelete else 要刪除的點是尾節點 else 鍊錶中有多個節點 刪除鍊錶中的重複節點 分析 有n個一樣的節點,則這n個節點全部刪除 實現 listnode deletedup...