使用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 →。
廣告