【问题标题】:Remove entire linked list C删除整个链表 C
【发布时间】:2013-03-19 02:36:58
【问题描述】:

我的程序使用链表按顺序输入数字。

My input: 2 4 23 34 534 543 

当我去删除列表时,我得到了这个:

137429056 137428992 137429040 137429024 137429008 0 

这是为什么呢?

void deleteList(node* head)
{
    if(head == NULL)
        printf("List is empty\n");

    else
        deleteList(head->next);

    free(head);
}

【问题讨论】:

    标签: c recursion linked-list


    【解决方案1】:

    您释放了内存,但没有将任何链接(或头部本身)设置为 null,因此您引用的是未分配的内存。

    另外:当 while 循环更简单时,为什么要使用递归?

    【讨论】:

    • 我认为递归更简单。不过效率较低!
    • @Claudiu +1 递归是否意味着简单是一个有争议的问题,尽管我同意你的观点:)
    • 使用递归,因为这是赋值。不过非常感谢您的回答。
    • 在这种情况下,递归看起来确实很简单,而且它可以用于分配任务,但是在您列出可能有数万个成员的现实世界应用程序中,您可以很快耗尽您的堆栈!跨度>
    【解决方案2】:

    这可能是一个非常古老的问题,但这个答案可以帮助某人。

    deleteList(struct node* temp)
    {
         if(temp == NULL)
              printf("List is empty\n");
    
         else {
              head = temp;
              temp->next = NULL;
              free(temp);
              deleteList(head->next);
         }
         head = NULL;
     }
    

    【讨论】:

      猜你喜欢
      • 2013-10-28
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 2021-06-07
      • 2018-09-03
      • 2018-10-14
      • 2019-05-10
      相关资源
      最近更新 更多