如何破坏c中的链表?

问题描述 投票:0回答:1

我有这个节点:

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也指向它,我现在的最后一个节点指向下一个节点在我的情况下,它是空的,所以我想做相反的..任何想法,我可以做到这一点!就像我怎么能做一个相反方向的破坏功能!

c
1个回答
0
投票

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

使用单链表,您只能指向一个方向,即链接指向的方向。听起来像建筑后的列表状态是这样的:

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

然后你打电话给destroyList(pointer)。这不是单链表所需要的。这样的列表应该保持指向列表开头的头指针,如下所示:

 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
© www.soinside.com 2019 - 2024. All rights reserved.