设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
写了一个循环链表,不知道为什么一跑起来就要关闭程序QA ...
返回列表
发新帖
写了一个循环链表,不知道为什么一跑起来就要关闭程序QAQ
[复制链接]
11
|
8
|
2021-1-27 07:18:52
|
显示全部楼层
|
阅读模式
#include
usingnamespacestd;
structNode
{
intdata;
Node*next;
};
Node*create(intn)//多少个节点
{
Node*p=NULL;//当前节点
Node*r=NULL;//前驱节点
Node*head=NULL;//头结点
inti=0;
//建立循环链表
for(i=0;idata=i;
if(head==NULL)
head=p;
else
r->next=p;
r=p;
}
p->next=head;
p=head;
returnhead;
}
intmain()
{
intn=5;
Node*head=NULL;
head=create(n);
return0;
}
分 -->
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
if(head==NULL)
head=p;
else
r->next=p;
r->next=p;这句有问题。
还有,如果你想做一个好的程序员,也要注意一点基本的代码书写规范。
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
请问有什么问题00?
引用1楼的回复:
if(head==NULL)
head=p;
else
r->next=p;
r->next=p;这句有问题。
还有,如果你想做一个好的程序员,也要注意一点基本的代码书写规范。
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
你把这儿改了试试
p->next=head;
p=head;
returnhead;
}
改为
r->next=head;
returnhead;
}
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
诶!好了诶!
为什么?两种写法有什么区别?
我原本那样写是要在建立完链表后最后把p指向头结点
为什么这样做就不可以?
引用3楼的回复:
你把这儿改了试试
C/C++code
p->next=head;
p=head;
returnhead;
}
改为
C/C++code
r->next=head;
returnhead;
}
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
我也对这个问题很奇怪,我调试了一下,循环结束后p的指针为NULL了,这是原来程序出错的地方。具体怎么回事也不清楚
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
明白了,你在循环里面定义了局部变量Node*p
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
就是说,一旦接受这个函数,p就释放掉了,可不可以这样理解?
引用6楼的回复:
明白了,你在循环里面定义了局部变量Node*p
回复
使用道具
举报
千问
|
2021-1-27 07:18:52
|
显示全部楼层
Node*p=newNode;
这个是你在循环体内定义的局部变量,跳出循环体就出了作用域了,起作用的就是
Node*p=NULL;//当前节点
当然p就变成NULL了。
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行