我编写了以下代码来创建链接列表。因此,我想知道如何删除链表的所有节点。而且我还想知道我创建节点并将元素插入其中的方式是正确的方式。
struct node
{
int val;
node *next;
};
int main()
{
node *head, *temp;
cout << "enter no of elements" << endl;
int n;
cin >> n;
//=============Creating Nodes And Inserting Elements===========//
for(int i = 0; i < n; i++)
{
cout << "enter the element in " << i << "th node" << endl;
if(i == 0)
{
temp = new node();
cin >> temp->val;
head = temp;
}
else
{
temp->next=new node();
temp=temp->next;
cin >> temp->val;
}
}
temp->next=NULL;
//===================Deleting all the nodes=================//
return 0;
}
答案 0 :(得分:1)
您通过遍历列表来delete
所有节点:
node *temptemp; // tempory variable to store
// the next list nodes address
for (temp = head; // begin at the head of the list
temp; // as long as temp != NULL
temp = temptemp // the temp->next we stored in the loops body
) {
temptemp = temp->next; // remember temp->next cause
delete temp; // next is gone now.
}
答案 1 :(得分:0)
您可以通过多种方式创建链表,我将向您展示其中的一种方式:
结构:
struct linkedList {
int data; // store data
linkedList *next; // store a pointer to the next node
} *head; // "head" is a pointer points to the first node
以下功能是创建新节点的简单方法:
void InsertNode(int data){
linkedList *node = new linkedList;
node->data = data;
node->next = head;
head = node;
}
当您要删除链表中的所有节点时:
void deleteAllNodes(){
linkedList *temp = head, *next;
while(temp != NULL){
next = temp->next;
delete temp;
temp = next;
}
delete head;
head = NULL;
}
如果有不清楚的评论。
答案 2 :(得分:0)
使用析构函数
struct node
{
~node()
{
if (NULL != next)
{
delete next;
}
}
int val;
node *next = NULL; //initialize with NULL
};
现在从您的主要删除头节点开始
int main()
{
...
delete head;
...
}
答案 3 :(得分:0)
最明显的问题是,为什么要创建自己的列表,而不使用std::list
这样的STL中的内容?您的编码方式更像C,而不是C ++。添加,删除等节点的方法应该是节点结构的成员函数。例如:
struct node
{
int val;
node *next;
explicit node(int val = 0) : val{val}, next{nullptr} {}
void add_node(node *nodep) {
node *tail = this;
while (tail->next != nullptr)
tail = tail->next;
tail->next = nodep;
}
~node() {
delete next;
}
};
但是最好使用STL中的容器。