使用 C++ 删除链表的最后一个节点
我们提供了一个单向链表,我们的任务是从该列表中删除最后一个节点。在这个问题中,我们将简单地遍历给定的列表并简单地删除最后一个节点。
寻找解决方案的方法
在这种方法中,我们遍历给定的列表,并跟踪前一个节点和当前节点。现在,当我们的当前节点成为最后一个节点时,我们将previous->next更改为NULL并删除当前节点。
示例
#include <iostream> using namespace std; struct Node { int data; struct Node* next; }; void push(struct Node** ref, int new_data) { //推动节点 struct Node* new_n = new Node; new_n->data = new_data; new_n->next = (*ref); (*ref) = new_n; } int main() { Node* head = NULL; push(&head, 12); push(&head, 29); push(&head, 11); push(&head, 23); push(&head, 8); auto curr = head, prev = head; if (!curr || !curr -> next) //如果列表只有一个元素或列表为空 cout << "Empty\n"; else { while (curr) { //而curr!=NULL if (!curr -> next) { prev -> next = NULL; delete(curr); //释放空间 break; } prev = curr; curr = curr -> next; //移动到下一个节点 } } for (Node* temp = head; temp != NULL; temp = temp->next) //打印数据 cout << temp->data << " "; return 0; }输出结果
8 23 11 29
上面代码的解释
在这种方法中,我们遍历数组,跟踪当前节点和前一个节点。现在,当我们的当前节点成为最后一个节点时,我们将previous->next更改为NULL并删除当前节点。给定程序的总时间复杂度为O(N),其中N是我们给定列表的大小。
时间复杂度-O(N)
N:我们数组的大小
结论
在本文中,我们解决了从给定链表中移除最后一个节点的问题。我们还学习了这个问题的C++程序和我们解决的完整方法。我们可以用其他语言编写相同的程序,例如C、java、python和其他语言。我们希望这篇文章对您有所帮助。