永发信息网

关于c++ 链表的问题

答案:3  悬赏:30  手机版
解决时间 2021-06-08 21:25
  • 提问者网友:未信
  • 2021-06-08 18:30


#include <iostream>
using namespace std;
struct book
{
int i;
int j;
struct book *nent;
};
int main()
{
book a,b,c,*p,*p1;
a.i=10;
a.j=4;
b.i=5;
b.j=7;
c.i=6;
c.j=400;
p=&a;
a.nent=&b;
b.nent=&c;
c.nent=NULL;
p1=p;
while(p1!=NULL)
{
cout<<p1->i<<endl<<p1->j<<endl;
p1=p1->nent;
}
return 0;
}

这段代码里面

为什么在main函数里面要用两个指针??

不是一个指针用来循环就可以了吗?

他为什么要多余使用p1=p;这句话??

这句话有啥特殊地含义吗?

为什么不直接使用p在while循环体里面执行循环??

谢谢知道的朋友说一下下!!!

最佳答案
  • 五星知识达人网友:天凉才是好个秋
  • 2021-06-08 18:49
呵呵~ 你也是看书上的例子吧
p这个指针只是一个表头指针,它在main进程里始终是指向表头的。
当然在这段很短代码里是没有用,若果没有它的话 ,只用一个指针你可以遍历一个链表。但是你想
遍历到表尾的时候,p1是指在NULL上的吧。遍历了链表但是却没法找到表头了。没法在调用它了,没法第二次遍历,没法释放
内存。所以要养成良好的编程习惯,头指针用head,千万不能用头指针来做遍历。
全部回答
  • 1楼网友:掌灯师
  • 2021-06-08 21:13
你也看出来多余了,在这里的确可以用p来直接访问链表的各个节点。如果p是头结点的话,还有点说的过去的理由(尽管代码没有其他用到头结点的地方),所以p1多余。另外从这个链表的人肉构造,外加*next写成*nent可以看出,估计这就是一新手写的例子代码,有点毛病很正常,不必在意。。
  • 2楼网友:老鼠爱大米
  • 2021-06-08 19:37
一个也可以,你的理解是对的。这程序明显是一个新手写的,struct book *nent;,一般来说这个变量名习惯上用next,表示指向下一个的指针,他可能也是这样想的但是拼写错了吧。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯