如何销毁c中的链表?

时间:2017-05-16 11:10:55

标签: c

我有这个节点:

typedef struct node {
    DATA *dataa ;
    struct node* next;
} *node_v;

假设我已经填写了链表..我现在想要检查并销毁它.. 我已经破坏了这个功能:

void destroyList(Node ptr) {
    while(ptr) {
        Node toDelete = ptr;
        ptr = ptr->next;
        free(toDelete);
    }
}

它需要一个节点并释放它。但我的问题是我的下一个节点指向NULL,前一个节点指向新节点! destroylist函数执行相反的操作..这意味着为了删除一个节点,我用我输入的最后一个节点调用函数destroy列表,但是toDeleate也指向它,我现在的最后一个节点指向下一个节点在我的情况下,它是空的,所以我想做相反的..任何想法,我可以做到这一点! 比如我怎么能做出一个相反方向的破坏功能呢?

1 个答案:

答案 0 :(得分:0)

  

我用我输入的最后一个节点调用函数destroy列表...如何创建一个反方向的destroy函数?

使用单链表,只有一个方向可以去,链接指向的方向。 听起来就像建立后的列表状态一样:

                          pointer
                             |
                             V
firstVal -> secondVal -> thirdVal -> NULL

然后你拨打destroyList(pointer)。这是单链表所需的内容。这样的列表应该保持指向列表的 start 的头指针,如下所示:

 pointer
    |
    V
firstVal -> secondVal -> thirdVal -> NULL

如果您要构建这样的列表,那么用于销毁列表的代码就可以正常工作。

由于您实际上显示构建列表的代码(而只是在构建后仅提供所述列表的描述),这很可能是您的问题。

为了正确构建列表,您可以使用伪代码,例如:

head = null
def append(head, tail, node):
    node.next = null
    if head == null:
        head = node
        tail = node
        return
    tail.next = node
    tail = node