使用 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) 接受一个当前指向头部的指针。

  • 创建前一个 Node 指针并将其初始化为 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 →。

以上是 使用 C++ 从给定的单链表中删除尾节点 的全部内容, 来源链接: utcz.com/z/338841.html

回到顶部