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