我正在学习c ++并尝试创建一个Linked-List数据结构。 这是程序 -
的main.cpp
#include <iostream>
using namespace std;
class LinkedList
{
public:
int data;
LinkedList *nextNode;
void init(int value,LinkedList *root)
{
root->data=value;
root->nextNode=NULL;
}
void add(int value,LinkedList *root)
{
LinkedList *temp=new LinkedList;
if(root->nextNode==NULL)
{
//cout<<"IF ADD()"<<endl;
temp->data=value;
temp->nextNode=NULL;
root->nextNode=temp;
}
else
{
//cout<<"else ADD()"<<endl;
while(root->nextNode!=NULL)
{
root=root->nextNode;
}
temp->data=value;
temp->nextNode=NULL;
root->nextNode=temp;
}
}
void display(LinkedList *root)
{
if(root->nextNode==NULL)
{
cout<<root->data<<endl;
}
else
{
while(root->nextNode!=NULL)
{
cout<<root->data<<endl;
root=root->nextNode;
}
}
}
void free(LinkedList *root)
{
if(root->nextNode==NULL)
{
delete root;
}
else
{
while(root->nextNode!=NULL)
{
LinkedList *temp=root->nextNode;
delete root;
root=temp;
}
}
}
};
int main()
{
LinkedList *root=new LinkedList;
root->init(1,root);
root->add(2,root);
root->add(3,root);
root->add(4,root);
root->add(5,root);
root->add(6,root);
root->add(7,root);
root->add(8,root);
root->add(9,root);
root->add(10,root);
root->display(root);
root->free(root);
//root->display(root);
//delete root;
return 0;
}
输出 - 1 2 3 4 五 6 7 8 9
我的问题是为什么它不打印最后一项,即10。 还有一个问题,你可以看到我正在评论以下一行
//delete root
在我的主要方法中。 如果我不调用我的free()方法并取消注释,该怎么办?它会释放整个LinkedList吗?
由于
答案 0 :(得分:1)
while(root->nextNode!=NULL)
{
cout<<root->data<<endl;
root=root->nextNode;
}
应该是
while(root!=NULL)
{
cout<<root->data<<endl;
root=root->nextNode;
}
答案 1 :(得分:1)
Porblem在else语句中使用此函数它不会到达最后一个节点,因为最后一个节点接下来将为NULL。还有一件事是你在显示函数中修改根应该是一个const函数。它不应该修改根。
void display(LinkedList *root) const
{
LinkedList * temp = root;
while(temp!=NULL)
{
cout<<temp->data<<endl;
temp=temp->nextNode;
}
}
实际实施应该是这样的。
void free(LinkedList *root)
{
LinkedList * temp = root;
LinkedList * nodeToFree = root;
while(temp!=NULL)
{
temp=temp->nextNode;
delete nodeToFree;
nodeToFree = temp;
}
}
关于你的第二个问题 - &gt;它不会清除记忆。但是因为应用程序关闭内存后它的一个小代码将被释放。释放内存总是最好的做法,否则你会有内存泄漏,如果这个数据结构被大量使用,它可能占用所有内存并使应用程序崩溃。
您的免费功能的实现也是不正确的。它应该是这样的
GOOGLE_ID = 'mygoogleId'
GOOGLE_SECRET = 'mysecretID'
GOOGLE_REDIRECT = http://localhost:8090/users
答案 2 :(得分:0)
更改显示条件
#include <iostream>
using namespace std;
class LinkedList
{
public:
int data;
LinkedList *nextNode;
void init(int value,LinkedList *root)
{
root->data=value;
root->nextNode=NULL;
}
void add(int value,LinkedList *root)
{
LinkedList *temp=new LinkedList;
if(root->nextNode==NULL)
{
//cout<<"IF ADD()"<<endl;
temp->data=value;
temp->nextNode=NULL;
root->nextNode=temp;
}
else
{
//cout<<"else ADD()"<<endl;
while(root->nextNode!=NULL)
{
root=root->nextNode;
}
temp->data=value;
temp->nextNode=NULL;
root->nextNode=temp;
}
}
void display(LinkedList *root)
{
if(root->nextNode==NULL)
{
cout<<root->data<<endl;
}
else
{
while(root !=NULL) // Change this condition
{
cout<<root->data<<endl;
root=root->nextNode;
}
}
}
void free(LinkedList *root)
{
if(root->nextNode==NULL)
{
delete root;
}
else
{
while(root->nextNode!=NULL)
{
LinkedList *temp=root->nextNode;
delete root;
root=temp;
}
}
}
在这里你可以只在你改变它的根值时显示它一次,所以如果你在上面的情况下使用临时变量来显示@sanjay就更好了。