链表擦除节点 CAR*移除(int*numberofstructures,CAR*first) { 字符类别清除[51]; CAR*帮助节点,*实际; int i; 整数_1=0; helpnode=(CAR*)malloc(sizeof(CAR)); 实际值=(CAR*)malloc(sizeof(CAR)); 实际=第一; number_1=*numberofstructures; helpnode=NULL; scanf(“%s”,类别删除); 对于(i=1;iznacka==类别擦除) { if(helpnode!=NULL){ 帮助节点->下一步=实际->下一步; 自由((无效*)实际); 实际=帮助节点->下一步; } 其他的 { 第一个=实际->下一个; 自由((无效*)实际); 实际=第一; } } 否则{ helpnode=实际值; 实际=实际->下一步; } } 先返回; }

链表擦除节点 CAR*移除(int*numberofstructures,CAR*first) { 字符类别清除[51]; CAR*帮助节点,*实际; int i; 整数_1=0; helpnode=(CAR*)malloc(sizeof(CAR)); 实际值=(CAR*)malloc(sizeof(CAR)); 实际=第一; number_1=*numberofstructures; helpnode=NULL; scanf(“%s”,类别删除); 对于(i=1;iznacka==类别擦除) { if(helpnode!=NULL){ 帮助节点->下一步=实际->下一步; 自由((无效*)实际); 实际=帮助节点->下一步; } 其他的 { 第一个=实际->下一个; 自由((无效*)实际); 实际=第一; } } 否则{ helpnode=实际值; 实际=实际->下一步; } } 先返回; },c,linked-list,C,Linked List,我想做一个函数,它将从链表中删除节点,首先你必须输入字符串。它应该删除具有汽车类别名称的节点,如输入的字符串。这看起来很像家庭作业。。。。因此,本着不为你写答案的迪克的精神,我将告诉你删除节点的想法 节点包含其数据和指向下一个节点的地址 既然你知道,你可以创建一个方法 从头部开始,并具有对当前节点和上一个节点的引用 当您在列表中搜索需要删除的节点时,您经常会被删除 循环当前和以前的节点变量 当您找到要查找的节点时,可以设置上一个节点的下一个地址指针 指向要删除的节点的下一个地址指针 祝你好运,长

我想做一个函数,它将从链表中删除节点,首先你必须输入字符串。它应该删除具有汽车类别名称的节点,如输入的字符串。

这看起来很像家庭作业。。。。因此,本着不为你写答案的迪克的精神,我将告诉你删除节点的想法

节点包含其数据和指向下一个节点的地址

既然你知道,你可以创建一个方法

从头部开始,并具有对当前节点和上一个节点的引用

当您在列表中搜索需要删除的节点时,您经常会被删除 循环当前和以前的节点变量

当您找到要查找的节点时,可以设置上一个节点的下一个地址指针 指向要删除的节点的下一个地址指针


祝你好运,长官

AMR是对的。如果您有一个双链接列表,那么删除节点将更容易,因此在节点的结构中包括上一个和下一个指针。基本上,以下是在伪代码中删除的方式(在找到指向要删除的节点的指针后):

如果条件很重要;否则,程序将崩溃,逻辑无法真正工作——您无法很好地替换不存在的东西。

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;
}
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