新微赢技术网

标题: [求助]改一下这个函数 [打印本页]

作者: 卐孬孬卐    时间: 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
觉得楼主好象对链表的理解的不太清楚, 我改了一下.

  1. #include <iostream>
  2. using namespace std;
  3. struct ListNode
  4. {
  5. int nun1;
  6. ListNode *next;
  7. };
  8. class MyList
  9. {
  10. int i;
  11. ListNode *head;
  12. public:
  13. MyList(); //默认构造函数
  14. ~MyList();
  15. void add(int&a); //原来的creatlist
  16. void displist();
  17. };

  18. MyList::MyList()
  19. {
  20. head = NULL;
  21. i = 0;
  22. }
  23. MyList::~MyList()
  24. {
  25. ListNode *t;
  26. t = head; //从头删除链表 ,释放空间
  27. while(t != NULL)
  28. {
  29. head = head->next;
  30. delete t;
  31. t = head;
  32. }
  33. }
  34. void MyList::add(int &a)//函数改了一下
  35. {
  36. ListNode *h, *t;
  37. h=new ListNode;
  38. h->nun1=a;
  39. h->next=NULL;
  40. if(i==0)
  41. {
  42. head=h;
  43. }
  44. else
  45. {
  46. t = head;
  47. while(t->next != NULL) //找到链表的结尾
  48. t = t->next;

  49. t->next = h; //加入
  50. }
  51. i++;
  52. }
  53. void MyList::displist()
  54. {
  55. ListNode *p=head;
  56. while(p!=NULL)
  57. {
  58. cout<<p->nun1<<" ";
  59. p=p->next;
  60. }
  61. cout<<endl;
  62. }

  63. int main()
  64. {
  65. MyList mylist; // 一个空表
  66. for(int i=1; i<6; i++)
  67. mylist.add(i);

  68. mylist.displist();
  69. system("pause");
  70. return 0;
  71. }
复制代码

作者: 平淡♀芳    时间: 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