1. 程式人生 > >如何刪除連結串列節點

如何刪除連結串列節點

 題目是這樣的:

一個單向連結串列,不知道頭節點,一個指標指向其中的一個節點,問如何刪除這個指標指向的節點?

有關連結串列的面試題在技術面試中是很常見的。因為連結串列在資料結構中是很基本的結構,另外,連結串列經常會使沒有紮實掌握的人陷入誤區。

就以這道題為例,沒有一定的基礎,感覺無從下手。但如果理解了連結串列在記憶體中的儲存方式,找到解決辦法也是不難的。

解決方案:將這個指標指向的next節點值copy到本節點,將next指向next->next,並隨後刪除原next指向的節點。

以下是原始碼實現:

class node
{
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;
}