劍指offer之面試題18 刪除鍊錶的節點

2021-10-04 23:18:42 字數 898 閱讀 7174

1、題目

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

輸入引數:單向鍊錶的頭指標phead,節點指標ptobedeleted

輸出結果:無

2、解題

這道題的關鍵在於如何在時間複雜度為o(1)的情況下刪除指定節點

因此,我們可以想到覆蓋的方法:先獲得要刪除節點的下一節點,將下一節點的值賦值給刪除節點,再將刪除節點的指標指向下下個節點,最後刪除下一節點即可,通過後面覆蓋前面的方式進行刪除。

這道題的難度在於對刪除節點不同情況的劃分

需要劃分為三種情況:

3、**

void

deletenode

(listnode*

* phead, listnode* ptobedeleted)

//如果要刪除的是尾結點

else

if(ptobedeleted ==

*phead)

else

pnode->m_pnext = nullptr;

delete ptobedeleted;

ptobedeleted = nullptr;

}}

4、注意點

5、**的可行性

上述**是基於乙個假設:要刪除的節點的確在鍊錶中。我們需要使用o(n)的時間才能判斷節點是否在鍊錶中,但又受到o(1)時間的限制,因此我們不得不把確保節點在鍊錶中的責任交給函式deletenode的呼叫者。在面試的時候,我們可以和面試官**這個假設,把問題考慮得更加全面。

劍指offer之面試題18 刪除鍊錶的節點

題目一 在 o 1 時間內刪除鍊錶節點 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在 o 1 的時間內刪除該節點。這種方法基於一種假設,那就是要刪除的節點一定在鍊錶中!我們把這種約束推給了呼叫者 package question18 public class t01 solve head,pt...

劍指offer之面試題9 4 矩形覆蓋

題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總共有多少種方法?思路 用數學歸納的思想分析,得出規律。牛客網提交 public class solution if target 2 return init target int...

劍指offer 面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。鍊錶節點與函式的定義如下 public static class listnode 將要刪除節點的next節點直接複製到該節點上。刪除原先的next節點 public void deletenode listnode hea...