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