写了一个循环链表,不知道为什么一跑起来就要关闭程序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了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行