如何在C语言中删除单链表?
我正在写一个C代码。我有一个单链表,我想删除一个节点,我不知道它的位置。我的结构是:如何在C语言中删除单链表?,c,struct,linked-list,free,strcmp,C,Struct,Linked List,Free,Strcmp,我正在写一个C代码。我有一个单链表,我想删除一个节点,我不知道它的位置。我的结构是: struct list_node{ int num; char name[25]; int year; float money; struct list_node *next; }; typedef struct list_node node; node *head=NULL; 我有一个值,我必须与node->name进行比较,以便它删除节点。我该怎么做?我已尝试使用此代码执行此操作: v
struct list_node{
int num;
char name[25];
int year;
float money;
struct list_node *next;
};
typedef struct list_node node;
node *head=NULL;
我有一个值,我必须与node->name进行比较,以便它删除节点。我该怎么做?我已尝试使用此代码执行此操作:
value=argv[2];
temp=head;
if(temp==NULL){
return 0;
}
if(strcmp(current->name,value)==0){
temp=head;
head=head->next;
free(temp);
return 0;
}
p=head;
while(p->next!=NULL){
if(strcmp(p->next->name,value)==0){
temp=p->next;
p->next=temp->next;
free(temp);
return 0;
}
p=p->next;
}
return 0;
}
但该节点未被删除。(我有一个打印列表的功能)试试这段代码。。我想你可能在使用指向结构的指针时犯了错误
{
node* temp;
node * ptr=head;
if(ptr=NULL)
{
return 0;
}
else if(strcmp(ptr->name, name2)==0)
{
head=head->next;
free(ptr);
return 0;
}
while(ptr->next!=NULL)
{
if(strcmp(ptr->next->name, name2)==0)
{
temp=ptr->next;
ptr->next=ptr->next->next;
free(temp);
return 0;
}
ptr=ptr->next;
}
printf("Node not found!");
return 0;
}
我有一个值,我必须与node->name进行比较,以便
删除节点。我该怎么做
…不太复杂:
node *curr, **prev;
for (prev = &head; curr = *prev; prev = &curr->next)
if (strcmp(curr->name, value) == 0)
{
*prev = curr->next,
free(curr);
break;
}
它不起作用不是一个有效的问题描述。它到底是怎么起作用的?请把你的问题说清楚。看一下你的代码,特别是在第二次strcmp之后。您要删除的是下一个节点,而不是当前节点。该代码中缺少很多内容,但这里也有大量代码用于一些简单的内容。您可能应该尝试将其分解为更小、更可测试的函数,比如正确初始化节点的函数、正确删除节点的函数、取消节点链接的函数,等等。使用测试驱动的开发模型可以在开发过程的早期摆脱许多难看的bug,而不必调试大量未经测试的代码。@Pablo It正在比较下一个值,然后删除下一个节点。它错了吗?@iBug我没有意识到strcmp实际上正在检查
p->next
,我没想到。在这种情况下,这没有错。请阅读,否则我们只是猜测。