C++程序 删除链表
C++算法:
逐个迭代链表并删除所有节点。这里的主要问题是如果删除当前指针,则不要访问下一个指针。
实现:
// C++程序删除链表
#include <bits/stdc++.h>
using namespace std;
// 链表节点
class Node
{
public:
int data;
Node* next;
};
// 删除整个链表的函数
void deleteList(Node** head_ref)
{
// 定义head_ref获取真实头
Node* current = *head_ref;
Node* next = NULL;
while (current != NULL)
{
next = current->next;
free(current);
current = next;
}
// 定义head_ref影响调用者中的真实头。
*head_ref = NULL;
}
/* 给定一个列表的引用(指向指针)和一个int,将一个新节点添加到列表的前面。*/
void push(Node** head_ref, int new_data)
{
// 分配节点
Node* new_node = new Node();
// 放入数据
new_node->data = new_data;
// 链接new_node的旧列表
new_node->next = (*head_ref);
// 将头移到新的节点
(*head_ref) = new_node;
}
// 驱动程序
int main()
{
// 从空列表开始
Node* head = NULL;
// 使用push()来构建列表
// 1->12->1->4->1
push(&head, 1);
push(&head, 4);
push(&head, 1);
push(&head, 12);
push(&head, 1);
cout << "删除链表";
deleteList(&head);
cout << "已删除链表";
}
// 此代码由rathbhupendra提供```
输出:
删除链表
已删除链表
时间复杂度: O(n)
辅助空间: O(1)