【问题标题】:Linked list erasing node链表擦除节点
【发布时间】:2012-11-25 19:52:45
【问题描述】:
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;
}

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

【问题讨论】:

标签: c linked-list


【解决方案1】:

这看起来很像家庭作业......所以本着不为你写答案的那个家伙的精神,我会告诉你删除节点的想法。

节点包含它们的数据和指向下一个节点的地址。

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

从头部开始,对当前节点和前一个节点都有引用

当您在列表中搜索需要删除的节点时,您会不断地 循环当前和前一个节点变量。

当你找到你正在寻找的节点时,你设置前一个节点下一个地址指针 指向您要删除的节点的下一个地址指针。

祝楼主好运!

【讨论】:

    【解决方案2】:

    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 条件很重要;否则程序会崩溃,并且逻辑不会真正起作用——你不能很好地替换不存在的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2015-04-15
      • 2019-05-10
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多