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

2021-06-16 20:09:15 字數 1483 閱讀 6068

方法一:順序查詢要刪除的結點,並在鍊錶中刪除。時間複雜度為o(n),不滿足題目要求

**:

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

else

pcur->m_pnext = ptobedeleted->m_pnext;

delete ptobedeleted;

ptobedeleted = null;

} } else

}

方法二:把下乙個結點的內容複製到需要刪除的結點上覆蓋原有的內容,再把下乙個結點刪除,相當於把當前要刪除的結點刪除了,不需要從前向後掃瞄鍊錶。

注意:考慮特殊情況:被刪除的結點是尾結點

兩種情況:1. 鍊錶有多個結點(只能順序查詢); 2. 鍊錶只有乙個結點

**:

#include "stdafx.h"

#include using namespace std;

struct listnode

;//刪除指定結點

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

else if (*plisthead == ptobedeleted)//鍊錶中只有乙個結點

else//被刪除的結點是尾結點

pcur->m_pnext = null;

delete ptobedeleted;

ptobedeleted = null;

} }else }

//建立乙個鍊錶,輸入從頭到尾結點的值,輸入-1表示結束

void createlist(listnode *& phead)

else

plistnode->m_pnext = null;

pcurlastnode->m_pnext = plistnode;

pcurlastnode = plistnode;

} }}

//從頭到尾列印鍊錶

void printlist(listnode *phead)

cout << endl;

} else }

int _tmain(int argc, _tchar* argv)

//刪除尾結點

listnode *pcur = phead;

if (pcur != null)

deletenode(&phead, pcur);

printlist(phead);

} system("pause");

return 0;

}

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

題目 給定單向鍊錶的頭指標和乙個結點指標,定義乙個函式在o 1 時間刪除該結點。鍊錶結點與函式的定義如下 struct listnode 在單向鍊錶中刪除乙個結點,最常規的方法是從頭到尾掃瞄一遍找到結點,然後刪除結點。對於給定的是值得結點,沒有辦法只能從頭到尾掃瞄乙個乙個對比值得大小,如果鍊錶中存在...

面試題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 ...