方法一:順序查詢要刪除的結點,並在鍊錶中刪除。時間複雜度為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 ...