作者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