删除整个链表



我不明白每次从内存中删除整个列表时,只删除一个特定的当前节点是如何做到的。在这里,他们创建了current,并将其值作为链接列表,但对实际的链接列表没有做任何更改。对我来说唯一有意义的一行是head_ref = NULL;
这是代码:

/* Function to delete the entire linked list */
void deleteList(Node** head_ref)  
{  

/* deref head_ref to get the real head */
Node* current = *head_ref;  
Node* next;  

while (current != NULL)  
{  
next = current->next;  
free(current);  
current = next;  
}  enter code here

/* deref head_ref to affect the real head back  
in the caller. */
*head_ref = NULL;  
} 

对于列表中的每个节点,您:

  1. 保存当前迭代指针值
  2. 将迭代指针前进到下一个列表节点
  3. 删除(1(中获取的节点

重复此操作,直到迭代节点位于NULL,这意味着列表的末尾。

坦率地说,如果在这一切结束之前不在*head_ref中留下一个悬空指针,而是在实际迭代中使用,这会更容易理解。Ie.

void deleteList(Node** head_ref)
{
while (*head_ref) // while we've not reached the end-of-list
{
Node *victim = *head_ref;  // 1. remember current node.
*head_ref = victim->next;  // 2. advance head to next node.
free(victim);              // 3. delete node from (1)
}
}

完成以上操作后,列表头将为NULL,并且之前包含的所有节点都将被销毁。任何时候都不会有一个悬着的指针。

相关内容

  • 没有找到相关文章

最新更新