我有这个节点:
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 list,但 toDeleate 也指向它,而我输入的最后一个节点现在指向下一个节点在我的例子中它是空的,所以我想做相反的事情..任何关于 hiw 的想法我都可以做到这一点! 就像我怎样才能创建一个相反方向的销毁函数!?
最佳答案
I call the function destroy list with the the last node I entered ... how can I make a destroy function that goes in the opposite direction?
对于单链表,您只能选择一个方向,即链接指向的方向。 听起来就像构建后列表的状态是这样的:
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
关于c - 如何销毁c中的链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43999847/