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