作者Sucker (e04)
看板C_and_CPP
标题[问题] 一般化串列反转 救命 我造太多口业了><
时间Tue Mar 17 17:28:16 2009
我玩一个下午,现在脑袋已经绞成一团了><
指标观念不清楚所以干了很多蠢事= =
大致上是跑出来了
只是存在两个疑点
(1)跑出来中间多一个空格 cba(d e)这样 是不是还是有错 囧
(2)为什麽串列反转那边不加system("PAUSE"),执行时视窗会自动消失呢
这条让我造最多孽...
以下附上完整程式码和一些注解
拜托大家帮我看看 麻烦罗
#include <iostream>
using namespace std;
struct listnode {
listnode *sub,*link; //sub指向sublist的node,link指向下一node
bool type; //type=true表存sublist,false表存一般data
char data;
listnode(char c) { //一般data的node建构式
data=c;
type=false;
link=NULL;
}
listnode(listnode&n){ //有子串列的node建构式
*sub=n;
type=true;
link=NULL;
}
};
//串列反转
listnode* invert(listnode*l) {
if(l!=NULL) {
listnode*p,*q,*r;
p=l;
q=NULL;
while(p!=NULL) {
if(p->type){
system("PAUSE");
p->sub=invert(p->sub);
}
r=q;
q=p;
p=p->link;
q->link=r;
}
return q;
}
return l;
}
//print串列
void print(listnode*l) {
if(l!=NULL) {
if(l->type) {
cout<<"(";
print(l->sub);
cout<<")";
}
else
cout<<l->data;
print(l->link);
}
}
int main() {
//这边只是串接一个测试串列 我是串成(de)abc
listnode*x=new listnode('a');
listnode*y=new listnode('b');
listnode*z=new listnode('c');
x->link=y;
y->link=z;
listnode*a=new listnode('d');
listnode*b=new listnode('e');
a->link=b;
listnode*w=new listnode(*a);
w->link=x;
//印出反转後答案
print(invert(w));
system("PAUSE");
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.86.176
1F:推 VictorTom:PAUSE那个, 因为你写的是console程式, 在windows环境下 03/17 17:57
2F:→ VictorTom:执行完就自动把console视窗关掉了, 所以您会看到一个命 03/17 17:58
3F:→ VictorTom:令提示字元的视窗出来一下又消失不见, 加个PAUSE只是用 03/17 17:58
4F:→ VictorTom:系统指令, 做出"Press anykey to continue"的效果而已:) 03/17 17:59
5F:→ Sucker:感谢楼上 只是我main有加了耶 invert那边不加还是会消失... 03/17 18:20
6F:推 VictorTom:Err~小弟眼残, 没注意到func里还有个PAUSE....Orz 03/17 18:28
7F:推 legendmtg:那就是你程式执行时出错直接当掉了 没跑到main的pause 03/17 18:28
8F:→ Sucker:恩恩 可是怪的是按下任意键後还是会跑出答案= = 03/17 20:24