小白求助!!一运行这个函数就什么都不显示!!
一调用studentlen函数运行就啥搜不显示
代码如下:[code=C/C++][/code]
#include <cstdlib>
#include <iostream>
using namespace std;
struct information//基本信息
{
char num[20]; //学号
char name[20];// 姓名
char classes[20];//班级
};
typedef struct linknode//定义节点类型
{
struct information in;//基本信息
struct linknode* next;//指向下一个节点的指针
}nodetype;
class student//定义学生类
{
private:
nodetype* head;//链表头指针
public:
nodetype* creatstudent (int);//创建链表
int studentlen();//返回链表长度
};
nodetype* student::creatstudent (int n)//创建链表
{
nodetype* h=NULL,*s,*t;//定义指针
for(int i=1;i<n;i++)
{
if(i==1)//创建第一个节点
{
h=(nodetype*)malloc(sizeof(nodetype));//分配空间
h->next=NULL;
t=h;
}
else//创建其他节点
{
s=(nodetype*)malloc(sizeof(nodetype));//分配空间
s->next=NULL;//将新节点加入链表
t->next=s;
t=s;
}
i++;
}
head = h;
return h;//返回头指针
}
int student::studentlen()//返回链表长度
{
int i = 0;
nodetype * h = head;
while(h!=NULL);//若链表没有结束
{
h=h->next;
i++;//节点累加
}
return i;//返回长度
}
int main(int argc, char *argv[])
{
student stu;
stu.creatstudent (4);
cout<<"链表"<<stu.studentlen()<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
[解决办法]
问题出在 studentlen函数 while语句后多加了个分号;
而且nodetype* creatstudent (int);//创建链表 函数里面对i++操作进行了两次.
[解决办法]
首先是创建链表函数里面:for循环里的i++和最后的i++重复了,
再次i应该从0开始而不是从1,否则循环次数是n-1:
for(int i=1;i<n;i++)
{
if(i==1)//创建第一个节点
......
i++;
}
最后还有这个while后面的分号会导致死循环:
while(h!=NULL);//若链表没有结束