CAR *removing(int *numberofstructures,CAR *first)
{
char categorytoerase[51];
CAR *helpnode,*actual;
int i;
int number_1=0;
helpnode=(CAR*)malloc(sizeof(CAR));
actual=(CAR*)malloc(sizeof(CAR));
actual=first;
number_1=*numberofstructures;
helpnode=NULL;
scanf("%s",categorytoerase);
for(i=1;i<=number_1;i++)
{
if (actual->znacka==categorytoerase)
{
if (helpnode != NULL) {
helpnode->next=actual->next;
free((void *)actual);
actual=helpnode->next;
}
else
{
first = actual -> next;
free((void *)actual);
actual = first;
}
}
else{
helpnode=actual;
actual=actual->next;
}
}
return first;
}
我想创建将从链表中删除节点的功能,首先必须输入字符串。它应该擦除那些具有汽车类别名称的节点,如输入的字符串。
答案 0 :(得分:1)
这看起来很像家庭作业......所以本着那个不为你写答案的鸡巴的精神,我会告诉你删除一个节点的想法。
节点包含其数据和指向下一个节点的地址。
所以既然你知道,你可以创建一个......
的方法从头开始,并引用当前节点和前一个节点
当您在列表中搜索需要删除的节点时,您经常会这样做 循环当前和以前的节点变量。
当您找到要查找的节点时,请设置前一个节点的下一个地址指针 到您要删除的节点的下一个地址指针。
祝你好运首席!答案 1 :(得分:0)
AMR是对的。如果您有一个双向链表,那么删除节点会更容易,因此在结构中包含节点的前一个和下一个指针。基本上,这是删除将如何在伪代码中发生(在您找到指向要删除的节点的指针之后):
IF todelete.prev != NULL THEN
todelete.prev.next = todelete.next
ELSE
list.head = todelete.next
END IF
IF todelete.next != NULL THEN
todelete.next.prev = todelete.prev
ELSE
list.tail = todelete.prev
END IF
FREE todelete
if条件很重要;否则程序会崩溃并且逻辑不起作用 - 你不能很好地替换不存在的东西。