簡體   English   中英

如何使用雙指針清除鏈表?

[英]How to clear a linked list using double pointer?

嗨,我正在嘗試創建一個清除*first指向的鏈接列表的函數,然后**first釋放節點**first並將指針*first設置為NULL

我在抓雙指針時遇到麻煩,無法使其正常工作。

刪除節點之前,必須移動到下一個列表元素。 否則,您正在訪問已釋放的內存。

while( *first != NULL )
{
    temp = *first;
    *first = temp->next;
    free(temp);
}

請注意,因為您正在廢棄整個列表, *first將最終為NULL。 因此,您可以使用單指針(就像temp一樣)遍歷列表,然后在結尾處設置*first = NULL 這節省了額外的指針間接,在這種情況下可以說是浪費CPU。

[編輯]我的意思是:

struct node *curr = *first;
struct node *prev;            

while( curr != NULL )
{
    prev = curr;
    curr = curr->next;
    free(prev);
}

*first = NULL;

一般來說,我發現指針解除引用的指針越少,代碼一目了然就越容易理解。

node* remove_node(node **double_pointer,int search_value)
//pass head of your node as a parameter to double pointer
{while(*double_pointer && **(double_pointer).value!=search_value)
{
double_pointer=&((**double_pointer)->next);
}
if(**double_pointer!=null)
{//lines below are to delete the node which contains our search value
node* deleted_node=*double_pointer;
*double_pointer=*double_pointer->next;
return deleted node;
}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM