使用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 →。
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP