新微赢技术网
标题:
[求助]改一下这个函数
[打印本页]
作者:
卐孬孬卐
时间:
2009-11-3 00:56
标题:
[求助]改一下这个函数
以下是个链表,结果输出1,而我要的是输出1 2 3 4 5
问题应该出在绿色处的函数定义,会的助我,谢谢
在头文件"mylist.h"中有
struct ListNode
{
int nun1;
ListNode *next;
};
class MyList
{
static int i;
ListNode *head;
public:
void displist();
void creatlist(int&a);
MyList(int a=1);
~MyList();
};
在文件"mylist.cpp"中有
#include "mylist.h"
#include <iostream>
using namespace std;
MyList::MyList(int a)
{
creatlist(a);
}
MyList::~MyList()
{
}
int MyList::i = 0;
void MyList::creatlist(int &a)//问题就在这个函数里,该怎么改呢
{
ListNode *h=NULL,*s,*t;
if(i==0)
{
h=new ListNode;
head=h;
h->nun1=a;
h->next=NULL;
}
t=h;
if(i!=0)
{
s=new ListNode;
t=new ListNode;
s->nun1=a;
s->next=NULL;
t->next=s;
t=s;
}
i++;
}
void MyList::displist()
{
ListNode *p=head;
while(p!=NULL)
{
cout<<p->nun1<<" ";
p=p->next;
}
cout<<endl;
}
主函数有
#include "mylist.h"
#include <iostream>
using namespace std;
void main()
{
MyList list,list1(3),list2(4),list3(5);
list.displist();
}
他为什么只输出1,我要的结果是1,2,3,4,5
作者:
Bu怕Bu怕
时间:
2009-11-3 00:56
问题就在绿色的地方。
void MyList::creatlist(int &a)//问题就在这个函数里,该怎么改呢
{
ListNode *h=NULL,*s,*t;
if(i==0)
{
h=new ListNode;
head=h;
h->nun1=a;
h->next=NULL;
}
t=h;
if(i!=0)
{
s=new ListNode;
t=new ListNode;
s->nun1=a;
s->next=NULL;
t->next=s;
t=s;
}
i++;
}
红色的地方画蛇添足。有了它,指针t就连不到head上了。
作者:
单身中
时间:
2009-11-3 00:56
建议把method:void creatlist(int&a) 设为private member.
这样更安全。
作者:
☆蘫弧ゞ无悔
时间:
2009-11-3 00:56
t=new ListNode;
去掉了,程序运行错误
能帮我完整的修改一下吗?
作者:
龙行天下
时间:
2009-11-3 00:56
觉得楼主好象对链表的理解的不太清楚, 我改了一下.
#include <iostream>
using namespace std;
struct ListNode
{
int nun1;
ListNode *next;
};
class MyList
{
int i;
ListNode *head;
public:
MyList(); //默认构造函数
~MyList();
void add(int&a); //原来的creatlist
void displist();
};
MyList::MyList()
{
head = NULL;
i = 0;
}
MyList::~MyList()
{
ListNode *t;
t = head; //从头删除链表 ,释放空间
while(t != NULL)
{
head = head->next;
delete t;
t = head;
}
}
void MyList::add(int &a)//函数改了一下
{
ListNode *h, *t;
h=new ListNode;
h->nun1=a;
h->next=NULL;
if(i==0)
{
head=h;
}
else
{
t = head;
while(t->next != NULL) //找到链表的结尾
t = t->next;
t->next = h; //加入
}
i++;
}
void MyList::displist()
{
ListNode *p=head;
while(p!=NULL)
{
cout<<p->nun1<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
MyList mylist; // 一个空表
for(int i=1; i<6; i++)
mylist.add(i);
mylist.displist();
system("pause");
return 0;
}
复制代码
作者:
平淡♀芳
时间:
2009-11-3 00:56
woodhead每次都是你帮我,感动
你写的程序很好。
而我的这个还是有错的,我想知道错在哪,你能告诉我错在哪吗?
void MyList::creatlist(int &a)//这个函数想要让他存入数据
{
ListNode *h=NULL,*s,*t;
if(i==0)
{
h=new ListNode;
h->nun1=a;
h->next=NULL;
head=h;
}
if(i!=0)
{
s=new ListNode;
s->nun1=a;
s->next=NULL;
h->next=s;
delete s;
}
i++;
delete h;
}
作者:
木子
时间:
2009-11-3 00:56
我的题目要求是:比如你用MyList创建了一些对象,MyList list,list1(3),list2(4),list3(5);
然后我用一个list.displist();就能把这些对象创建的数据全部输出来。
作者:
我是哈密瓜耶
时间:
2009-11-3 00:56
if(i!=0)
{
s=new ListNode;
s->nun1=a;
s->next=NULL;
h->next=s;
delete s;
}
i++;
delete h;
看不懂,如果链表不是空的, 想要怎么做?
作者:
夜流冰
时间:
2009-11-3 00:56
就是想要往你添加数据,我这个题目的要求(意思好象是类对象相加,我猜的,^_^ ^_^)
就比如:MyList list,list1(2),list2(3),list3(4);
有list,list1,list2,list3这些对象,然后我只要用一个list.displist()就能输出1,2,3,4而不是只单独输出一个1
作者:
依然范特西
时间:
2009-11-3 00:56
这个我不会了, 多看看书吧
欢迎光临 新微赢技术网 (http://bbs.weiying.cn/)
Powered by Discuz! X3.2