C++动态创建链表的问题,请高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/07/03 02:56:18
目的是动态创建一个链表,但是运行后只会输出第一个结点的值,还弹出运行出错信息,不能实现!

#include <iostream>
using namespace std;
//--------------------------
struct student //定义结构体
{
int snum;
student *next;
}*stu;
//--------------------------
student* createlist() //输入:动态创建链表
{
student *head;
stu = new student;
cout<<"依次输入学生学号(-1结束):"<<endl;
cin>>stu->snum;
head = stu;
stu = stu->next;
int num;
do
{
stu = new student;
cin>>num;
stu->snum = num;
stu = stu->next;
} while(num != -1);
stu = NULL;
return head;
}

//----------------------------
void main()
{
student *Head = createlist();
while ( Head != NULL)
{
cout<<Head->snum<<endl;
Head = Head->next;
}
delete stu;
}
真的很感谢大家!我觉得大家回答得都很好,完全没法取舍。我只能转入投票了。再

问题在这里:

stu = stu->next;

当创建第一个节点的时候,stu的next成员没有初始化就被使用了,所以……

student* createlist() //输入:动态创建链表
{
student *head = new student;
student* stu=head,*p;
cout<<"依次输入学生学号(-1结束):"<<endl;
cin>>stu->snum;
int num;
do
{
p = new student;
cin>>num;
p->snum = num;
stu->next = p;
p=stu;
} while(num != -1);
p = NULL;
stu = NULL;
return head;
}

哈哈…… 我以前也和有过同样的天真的想法:就是只定义一个指针,然后用该指针开辟一段空间后,再令它等于它的指针域,这样一直循环下去…… 可是这样不行,必须定义两个指针。代码如下:

#include <iostream>
using namespace std;
//--------------------------
struct student //定义结构体
{
int snum;
student *next;
}*stu;
//--------------------------
student* createlist() //输入:动态创建链表
{
student *head,*a; //再加一个指针a
stu = new student; //一下都用指针stu去开辟内存空间
cout<<&quo