我有这个代码。它会删除数据,但必须逐个删除数据,向用户显示删除的内容。它必须从头到尾删除,并从头到尾删除。
#include<stdio.h>
#include<stdlib.h>
typedef struct _node {
int data;
struct _node *next;
} node;
int addnode(node *head, char c){
node *temp;
temp = (node *) malloc(sizeof(node));
temp->data=c;
temp->next=head->next;
head->next=temp;
return 0;
}
int deletenode(node *head){
struct node *x;
node *prev = head;
while(prev->next != NULL && prev->next != x)
prev = prev->next;
if(prev->next==NULL)
return;
prev->next=prev->next->next;
free(x);
return;
}
int main(void){
node head, *current;
head.next=NULL;
addnode(&head, 'a');
addnode(&head, 'b');
addnode(&head, 'c');
current=head.next;
while(1){
printf("%c", current->data);
if(current->next == '\0') break;
current=current->next;
}
printf("-%c", deletenode(&head));
printf("-%c", deletenode(&head));
printf("-%c", deletenode(&head));
return 0;
}
我的代码只打印: c b a - - - 提前致谢
答案 0 :(得分:0)
更简单的方法是将节点标记为“已删除”&#39;在列表中,必要时一次删除它们。您只需要添加一个额外的字段(例如&#39; int deleted&#39;)来修改您的结构。
编辑:
我错了,抱歉!
如果你想要从头到尾和从头到尾删除一个列表,那么你的列表必须双重链接,即每个节点必须有两个指针,其中有一个&#39; next&#39;指向下一个节点和一个&#39; prev&#39;指向上一个节点。否则,在两个方向上遍历列表都不是非常有效和方便。
此外,如果我们将某个节点标记为已删除&#39;但不是真的删除它。我们可以实施一个清晰的清单&#39;逐个节点清除列表的方法,不用担心我们可能搞乱指针,特别是在程序中使用列表时。