设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 677|回复: 9
打印 上一主题 下一主题

[求助]改一下这个函数

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 00:56:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是个链表,结果输出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
2#
发表于 2009-11-3 00:56:31 | 只看该作者
问题就在绿色的地方。

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上了。
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 00:56:32 | 只看该作者
建议把method:void creatlist(int&a) 设为private member.
这样更安全。
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 00:56:33 | 只看该作者
t=new ListNode;
去掉了,程序运行错误
能帮我完整的修改一下吗?
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 00:56:34 | 只看该作者
觉得楼主好象对链表的理解的不太清楚, 我改了一下.

  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. }
复制代码
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 00:56:35 | 只看该作者
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;
}
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 00:56:36 | 只看该作者
我的题目要求是:比如你用MyList创建了一些对象,MyList list,list1(3),list2(4),list3(5);
然后我用一个list.displist();就能把这些对象创建的数据全部输出来。
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 00:56:39 | 只看该作者
if(i!=0)
{
s=new ListNode;
s->nun1=a;
s->next=NULL;
h->next=s;
delete s;
}
i++;
delete h;

看不懂,如果链表不是空的, 想要怎么做?
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-3 00:56:43 | 只看该作者
就是想要往你添加数据,我这个题目的要求(意思好象是类对象相加,我猜的,^_^ ^_^)
就比如:MyList list,list1(2),list2(3),list3(4);
有list,list1,list2,list3这些对象,然后我只要用一个list.displist()就能输出1,2,3,4而不是只单独输出一个1
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-3 00:56:44 | 只看该作者
这个我不会了, 多看看书吧
回复 支持 反对

使用道具 举报

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

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 05:51 , Processed in 0.111843 second(s), 10 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表