为什么我的 c++ 程序没有打印链接列表的所有项目?
Why my c++ program doesn't print all the items of a LinkedList?
我正在学习c++,并尝试创建一个链表数据结构。这是程序-
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.5.6.7.8.9
我的问题是为什么它不打印最后一项,即10。还有一个问题,正如你所看到的,我在下面的行中评论
//delete root
在我的主要方法中。如果我不调用我的free()方法并取消注释该怎么办?它会释放整个LinkedList吗?
感谢
问题是在else语句中使用此函数时,它不会转到最后一个节点,因为最后一个结点的next将为NULL。还有一件事是,您正在修改显示函数中的根,它应该是一个常量函数。它不应该修改根。
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 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;
}
}
while(root->nextNode!=NULL)
{
cout<<root->data<<endl;
root=root->nextNode;
}
应该是
while(root!=NULL)
{
cout<<root->data<<endl;
root=root->nextNode;
}
更改显示的条件
#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在上面的情况下那样使用temp变量来显示它会更好。
相关文章:
- 从链接列表c++中删除一个项目
- 如何维护资源管理器项目视图中当前可见的项目列表
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 在给定的项目列表上实现搜索?
- 从文本文件读取,然后将项目存储到列表中
- 无法在我的链接列表中插入项目,head始终为NULL
- 通过查找一对项目的代码获取错误的输出,在给定的总和相等的给定列表中列表
- 如何获得项目中所有UCLASSE的列表(蓝图和C )
- 在修改项目列表时,请防止可编辑的Qcombobox选择更改
- C MakeFile项目如何使用相同的Basename加上后缀和相同扩展名创建文件列表
- 如何在C 中以给定索引列表中的项目插入项目
- 在拖放 QML 列表中插入/删除项目使用 cpp 模型查看
- 丢失的项目最终列表
- LVM_GETNEXTITEM在列表视图中找不到项目
- 链接列表中最后一项之后的项目是否为0
- 我想使用列表中的项目在地图中搜索
- 发送 QML 项目列表C++类连接到 QML :M16 错误
- QTreeView中可见项目的列表
- 访问链接的列表项目从参考这些项目的参考文献中
- C 使用字符串项目在列表中查找结构