題目是這樣的:
一個單向鏈表,不知道頭節點,一個指針指向其中的一個節點,問如何刪除這個指針指向的節點?
有關鏈表的面試題在技術面試中是很常見的。因爲鏈表在數據結構中是很基本的結構,另外,鏈表經常會使沒有紮實掌握的人陷入誤區。
就以這道題爲例,沒有一定的基礎,感覺無從下手。但如果理解了鏈表在內存中的存儲方式,找到解決辦法也是不難的。
解決方案:將這個指針指向的next節點值copy到本節點,將next指向next->next,並隨後刪除原next指向的節點。
以下是源代碼實現:
{
public:
node(int x) : data(x), next(0){}
int data;
node* next;
};
void DelNode(node* pDel)
{
node* pTemp = pDel->next;
memcpy(pDel, pTemp, sizeof(node));
pDel->next = pTemp->next;
delete pTemp;
}