簡體   English   中英

關於刪除鏈表中最后一個節點的困惑

[英]Confusion about deleting the last node in linked list

刪除最后一個節點的邏輯如下:

轉到節點女巫的指針,其下一個為NULL然后釋放它,對嗎? 我試圖在一個函數中實現此邏輯:

node* Delete_Last(node*head){
   node* i=head;
   while (i->next!=NULL){
      i=i->next;
   }
   free(i);
   i=NULL;
   return head;
}

當我嘗試打印列表時,我不能-這是一個無限循環。 您能告訴我我的邏輯有什么缺陷以及如何糾正它嗎?

不,這是不對的。 您還必須更新上一個節點和下一個節點,如果head是最后一個節點,則必須更新。 因此,首先您應該將指針指向head指針,以防萬一需要更新head。 其次,由於它是單鏈表,因此應保留上一個節點:

node* Delete_Last(node** head) {
    if (!*head) {
        return 0;
    }

   node* i = *head, *previous = 0;
   while (i->next){
      previous = i;
      i = i->next;
   }
   free(i);
   if (previous) {
       previous->next = 0;
   } else {
       *head = 0;
   }
   return previous;
}

我不知道您要返回什么,因此我在您的代碼中假定了它的新目的,再次返回head毫無意義。 現在,您可以通過以下方式調用此方法:

node* prevLast = Delete_Last(&head);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM