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

2021-06-26 03:42:46 字數 775 閱讀 4138

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

struct listnode

在單向鍊錶中刪除乙個結點,最常規的方法是從頭到尾掃瞄一遍找到結點,然後刪除結點。

對於給定的是值得結點,沒有辦法只能從頭到尾掃瞄乙個乙個對比值得大小,如果鍊錶中存在,則刪除結點。

本題給出的是乙個結點的指標,我們無需掃瞄就可以得到結點的指標,在這個過程中,只要把當前結點(p)的next結點(q)的值賦給當前結點,把q的next結點連線到p的next域刪,接下來刪除結點q就滿足題目的要求了。

但是這個題目中存在許多陷阱:首先是邊界條件的考慮,然後是刪除結點的位置,表頭,表尾,和中間,不同的地方刪除時處理不一樣。

下面給出,刪除函式

void deletenode(listnode** plisthead, listnode* ptobedeleted)

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

if(ptobedeleted->m_pnext != null)

//鍊錶中只存在乙個結點,刪除頭結點

else if(*plisthead == ptobedeleted)

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

else

pnode->m_pnext = null;

delete ptobedeleted;

ptobedeleted = null;

}}

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

面試題13 題目 給定單向鍊錶的頭指標和乙個指標結點,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 struct listnode void deletenode listnode plisthead,listnode ptobedeleted 常規的做法是從頭結點開始順序查詢到要...

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

題目 給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 struct listnode void deletenode listnode plisthead,listnode ptobedeleted 刪除結點的操作我們經常碰到,比如乙個鍊錶a b ...

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

題目 給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 1 struct listnode 2 分析 如下圖所示,假設要刪除的結點為p結點,若直接刪除p結點,則必須知道p的上乙個結點,而查詢p的上乙個結點的時間複雜度為o n 可以交換p和p的下乙個結...