使用C++刪除給定單鏈表的尾節點


連結串列是一種線性資料結構,包含節點,每個節點有兩個欄位;一個是插入的值或資料,另一個欄位儲存下一個節點的地址。

我們的任務是從連結串列的末尾刪除一個節點。最後一個節點稱為尾節點。如果連結串列中沒有節點,則返回NULL。

例如:

輸入1 − 1 → 2 → 3 → 4 → 5

輸出 − 1 → 2 → 3 → 4 →

解釋 − 在給定的單鏈表中,末尾的節點是‘5’。刪除最後一個節點後,輸出將是1 → 2 → 3 → 4 →。

輸入2 − 5 → 8 → 3

輸出 − 5 → 8 →

解釋 − 在給定的單鏈表中,末尾的節點是‘3’。刪除末尾節點後,輸出將是5 → 8 →。

解決此問題的方法

解決此問題的簡單方法是建立一個前一個節點,噹噹前指標指向連結串列的最後一個節點時,該節點稍後將儲存當前節點的值。

如果當前節點指向最後一個節點,則迭代連結串列的所有節點。最後,從連結串列返回。

  • 透過將節點插入其中來初始化連結串列。

  • 函式insertAtFirst(node*&head, int data) 將所有節點插入連結串列。

  • 函式deleteAtTail(node*head) 獲取當前指向頭的指標。

  • 建立一個前一個節點指標並將其初始化為NULL。

  • 建立一個臨時節點指標,該指標當前指向頭的指標。

  • 遍歷臨時指標,直到它沒有到達連結串列的末尾。

  • 將臨時指標的值儲存在前一個節點指標中。

  • 刪除臨時指標。

  • 返回連結串列。

示例

 線上演示

#include<iostream>
using namespace std;
class node{
   public:
   int data;
   node*next;
   node(int d){
      data=d;
      node*next= NULL;
   }
};
void insertAtFirst(node*&head, int data){
   node*n= new node(data);
   n->next= head;
   head=n;
}
void printNode(node*head){
   while(head!=NULL){
      cout<<head->data<<"->";
      head=head->next;
   }
   cout<<endl;
}
void deleteatTail(node*head){
   node*prev= NULL;
   node*temp= head;
   while(temp->next!=NULL){
      prev= temp;
      temp=temp->next;
   }
   delete temp;
   prev->next= NULL;
   return;
}
int main(){
   node*head= NULL;
   insertAtFirst(head,5);
   insertAtFirst(head,4);
   insertAtFirst(head,3);
   insertAtFirst(head,2);
   insertAtFirst(head,1);
   deleteatTail(head);
   printNode(head);
}

輸出

執行以上程式碼將生成以下輸出:

1→2→3→4→

在給定的輸入單鏈表1 → 2 → 3 → 4 → 5中,連結串列的最後一個節點是‘5’。因此,刪除最後一個節點後,連結串列將變為1 → 2 → 3 → 4 →。

更新於:2021年2月5日

2K+ 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告