我感觉是链表逆序发生了异常,可我找不出错误!帮帮忙吧!

lrd408 2008-03-23 08:52:53
#ifndef LIST_H
#define LIST_H
class list {
public:
list() {number=1.0;pNext=0;}
list(double num,list* pN) : number(num),pNext(pN) {}
double number;
list* pNext;
};
#endif


#ifndef HAISU_H
#define HAISU_H
#include <iostream>
#include "List.h"
using std::cout;
using std::endl;
using std::cin;

//显示链表
void showlist(list* pHead) {
list* m=pHead;int count;
for( count=0;m!=0;m=m->pNext )
{++count;
cout<<m->number;
if(count%5==0) cout<<'\n';
else cout<<' ';}
cout<<endl;
}
//逆序操作
void reverslist(list* pHead) {
list* p=0;list* q=0;
if(pHead) { { p=pHead;q=p->pNext;
p->pNext =0;}

while(q) {list* h=q->pNext;q->pNext=p;p=q;q=h;}
pHead=p;
showlist(pHead);
}
else cout<<"链表为空!";
cout<<endl;
}
//插入操作
void insertlist(list* a,list* pHead) {
double vu=0;
cout<<"请输入一个数进行插入"<<endl;
cin>>vu;
list* b=new list(vu,0);
list* p=a->pNext;
a->pNext =b;
b->pNext =p;
showlist(pHead);
cout<<endl;
}


#include <iostream>
#include "List.h"
#include "haisu.h"
using std::cout;
using std::endl;
using std::cin;

int main() {
list* p=0;
list* pHead=new list(12.4,0);
list* o=new list(67.9,0);
list* r=new list(45.5,0);
list* s=new list(67.9,0);
list* t=new list(48.2,0);
list* u=new list(59.2,0);
list* w=new list(78.3,0);
list* x=new list(96.5,0);
list* y=new list(41.0,0);
list* z=new list(58.9,0);
pHead->pNext =o;
o->pNext =r;
r->pNext =s;
s->pNext =t;
t->pNext =u;
u->pNext =w;
w->pNext =x;
x->pNext =y;
y->pNext =z;
reverslist( pHead);//链表逆序
insertlist( t, pHead);//插入节点




while(p=pHead){
pHead=pHead->pNext;
delete p;
}

return 0;
}


结果:#include <iostream>
#include "List.h"
#include "haisu.h"
using std::cout;
using std::endl;
using std::cin;

int main() {
list* p=0;
list* pHead=new list(12.4,0);
list* o=new list(67.9,0);
list* r=new list(45.5,0);
list* s=new list(67.9,0);
list* t=new list(48.2,0);
list* u=new list(59.2,0);
list* w=new list(78.3,0);
list* x=new list(96.5,0);
list* y=new list(41.0,0);
list* z=new list(58.9,0);
pHead->pNext =o;
o->pNext =r;
r->pNext =s;
s->pNext =t;
t->pNext =u;
u->pNext =w;
w->pNext =x;
x->pNext =y;
y->pNext =z;
reverslist( pHead);//链表逆序
insertlist( t, pHead);//插入节点




while(p=pHead){
pHead=pHead->pNext;
delete p;
}

return 0;
}

结果:58.9 41 96.5 78.3 59.2
48.2 67.9 45.5 67.9 12.4
请输入一个数进行插入
12
12.4


...全文
93 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lrd408 2008-03-24
  • 打赏
  • 举报
回复
8楼的和6楼的,真是十分感谢!程序是对了,可我还不太理解,我自学的时候把指向指针的指针给跳了过去!还有这应该还有我对作用域的理解不准确,这是我编得第一个程序!C++我只看了,没自己编过程序!
zhb200692279 2008-03-23
  • 打赏
  • 举报
回复
因为你尽管在逆序函数中pHead = p;
但是此函数的pHead与主函数中的pHead是不同,你只改变了reverselist中的pHead,
主函数中pHead还是指向12.4那个节点。
zhb200692279 2008-03-23
  • 打赏
  • 举报
回复
在主函数中把insertlist(t,pHead);//插入节点中的pHead 改为z即可
如下:
insertlist( t, z);//插入节点
lrd408 2008-03-23
  • 打赏
  • 举报
回复
我刚入门,你好强啊!虽然咋一看我还很难理解,我感觉可能对!
oo 2008-03-23
  • 打赏
  • 举报
回复
//逆序操作  
void reverslist(list* pHead) { //你这个pvhead只能传入,不能传出,可以改成list **pHead或者把返回类型改成list*
list* p=0;list* q=0;
if(pHead) { { p=pHead;q=p->pNext;
p->pNext =0;}

while(q) {list* h=q->pNext;q->pNext=p;p=q;q=h;}
pHead=p; //这样赋值只能改变形参,不能改变调用处的实参
showlist(pHead);
}
else cout < <"链表为空!";
cout < <endl;
}
oo 2008-03-23
  • 打赏
  • 举报
回复
//逆序操作
void reverslist(list* pHead) { //你这个pvhead只能传入,不能传出,可以改成list **pHead或者把返回类型改成list*
list* p=0;list* q=0;
if(pHead) { { p=pHead;q=p->pNext;
p->pNext =0;}

while(q) {list* h=q->pNext;q->pNext=p;p=q;q=h;}
pHead=p; //这样赋值只能改变形参,不能改变调用处的实参
showlist(pHead);
}
else cout < <"链表为空!";
cout < <endl;
}
lrd408 2008-03-23
  • 打赏
  • 举报
回复
能逆序,但插入后不能输出!
oo 2008-03-23
  • 打赏
  • 举报
回复
拜托,这么长的代码,你就不能说一下错误在哪发生?
另外你做过什么调试操作,效果怎样?
jieao111 2008-03-23
  • 打赏
  • 举报
回复
void reverslist(list* *pHead) { 
list* p=0;list* q=0;
if(*pHead)
{

{
p=*pHead;
q=p->pNext;
p->pNext =0;
}

while(q)
{list* h=q->pNext;q->pNext=p;p=q;q=h;}

*pHead=p;


}

}


在主函数里是
showlist(pHead) ;
cout<<"逆序后" <<endl;
reverslist( &pHead);//链表逆序
showlist(pHead) ;

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧