【问题标题】:Deleting Node from Linked List based on User Input根据用户输入从链表中删除节点
【发布时间】:2017-02-10 19:19:19
【问题描述】:

试图了解如何正确设置一个函数,该函数将根据用户指定的参数从链表中删除。所以我有一个名为listglobal 变量,其中包含所有dog structs。如果链表中有多个结构,我可以让列表删除用户想要删除的节点,但由于某种原因,如果只有一个节点或者我要删除的节点是列表的头部,则函数不会删除它。对此问题的任何指导将不胜感激。

void remove_one(char* name)
{


    struct dog *tempList = list;
    struct dog *previous = NULL;

    if (tempList == NULL) {
        return;
    }

    while (tempList != NULL) {
        if (strcmpi(tempList->name, name) == 0) {


            if (previous == NULL) {
                tempList = tempList->next;
            }  


            else {
                previous->next = tempList->next;
                free(tempList);
                tempList = previous->next;
            }

            return;
        }

        else {
            previous = tempList;
            tempList = tempList->next;
        }


    }

    return;

}

【问题讨论】:

    标签: c linked-list structure nodes


    【解决方案1】:

    这里有两个问题:

    if (previous == NULL) {
          tempList = tempList->next;
              }  
    

    首先,tempList 是一个局部变量,所以你并没有真正删除头部。下次进入例程时,list 仍指向相同(有效)值。

    第二,你没有释放内存。

    正确的代码:

    if (previous == NULL) {
          list = tempList->next;  // change global variable so head is "tempList->next"
          free(tempList);  // free templist memory else you get memory leak
              }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      相关资源
      最近更新 更多