【发布时间】:2020-03-09 07:28:34
【问题描述】:
我是新来的。我需要向大家询问有关链表的问题,特别是关于从给定字符串输入的任何位置删除节点的问题。我编写的这段代码据说可以完成任务......
void popMiddle(struct data **head, struct data **tail, char name[])
{
if(*head == NULL)
{
printf("No Data to Delete\n");
}
else if(*head == *tail)
{
if (strcmp((*head)->name, name)==0)
{
free(*head);
*head = *tail = NULL;
}
else
{
printf("No Data to Delete\n");
}
}
else if (strcmp((*head)->name, name)==0)
{
struct data *curr = *head;
*head = (*head)->next;
free(curr);
curr = NULL;
}
else
{
struct data *curr1 = *head;
struct data *curr2;
while (strcmp(curr1->next->name, name)!=0 && curr1 !=NULL)
{
printf("%d\n", curr1);
curr1 = curr1->next;
}
if ( curr1->next != *tail )
{
curr2 = curr1->next;
curr1->next = curr2->next;
free(curr2);
curr2 = NULL;
}
else if (curr1->next == *tail)
{
free(*tail);
*tail = curr1;
(*tail)->next= NULL;
}
else
{
printf("No Data to Delete\n");
}
}
}
这是我一直在使用的链接列表:
莎拉->约翰->戈登
我想删除一个包含“Jack”的节点。但是,如您所知,它不存在于链表中。因此,输出应该是“没有要删除的数据”。不幸的是,控制台不会打印任何东西...我怀疑这是循环。但我需要知道它哪里出错了...谢谢您的关注。
【问题讨论】:
-
我需要知道如何确保代码遍历每个节点,同时将其与字符串输入进行比较。我很乐意弄清楚代码将如何到达
else子句。
标签: c linked-list