面試題13 在O 1 時間內刪除鍊錶結點

2021-07-27 06:57:13 字數 465 閱讀 5992

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

struct listnode

;

思路;如果按照常規方法,需要從頭指標開始遍歷,找到要刪除的節點指標的前乙個指標,使前乙個指標在指向要刪除結點的下乙個結點,則需要時間複雜度為o(n)。

設要刪除的節點指標為i,結點指標順序為x,i,y,z。則令x->m_pnext = y; free(i);即可。

換種思路,我們可以將y結點的資訊複製到i中來,然後在令i->m_pnext=z;free(y);即可。

如果i為表尾指標(需要提前判斷if(i->m_pnext==null)),則依然需要從頭指標開始遍歷,並且最後要令為結點的m_pnext為null,此次遍歷的時間複雜度為o(n)。

如果整個鍊錶只有乙個結點時,刪除這個結點後,還需將頭指標置為0。綜上所述,平均時間複雜度為o(1)。

在O 1 時間內刪除鍊錶節點

題目 給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 的時間刪除該節點。struct listnode void deletenode listnode plisthead,listnode ptobedeleted 演算法思路 一般我們是從頭節點開始遍歷,知道找到要刪除的節點的前面乙個節...

在 O 1 時間內刪除鍊錶節點

解題思路 如果該節點不是尾節點,那麼可以直接將下乙個節點的值賦給該節點,然後令該節點指向下下個節點,再刪除下乙個節點,時間複雜度為 o 1 如果鍊錶只有乙個節點,那麼直接 否則,就需要先遍歷鍊錶,找到節點的前乙個節點,然後讓前乙個節點指向 null,時間複雜度為 o n 綜上,如果進行 n 次操作,...

在O 1 時間內刪除鍊錶節點

from acwing 28 time limit 1s memory limit 64mb problem description 給定單向鍊錶的乙個節點指標,定義乙個函式在o 1 時間刪除該結點。假設鍊錶一定存在,並且該節點一定不是尾節點。sample 輸入 鍊錶 1 4 6 8 刪掉節點 第2...