[問題] 一般化串列反轉 救命 我造太多口業了><

看板C_and_CPP (C/C++)作者 (e04)時間16年前 (2009/03/17 17:28), 編輯推噓3(305)
留言8則, 3人參與, 最新討論串1/1
我玩一個下午,現在腦袋已經絞成一團了>< 指標觀念不清楚所以幹了很多蠢事= = 大致上是跑出來了 只是存在兩個疑點 (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

03/17 17:57, , 1F
PAUSE那個, 因為你寫的是console程式, 在windows環境下
03/17 17:57, 1F

03/17 17:58, , 2F
執行完就自動把console視窗關掉了, 所以您會看到一個命
03/17 17:58, 2F

03/17 17:58, , 3F
令提示字元的視窗出來一下又消失不見, 加個PAUSE只是用
03/17 17:58, 3F

03/17 17:59, , 4F
系統指令, 做出"Press anykey to continue"的效果而已:)
03/17 17:59, 4F

03/17 18:20, , 5F
感謝樓上 只是我main有加了耶 invert那邊不加還是會消失...
03/17 18:20, 5F

03/17 18:28, , 6F
Err~小弟眼殘, 沒注意到func裡還有個PAUSE....Orz
03/17 18:28, 6F

03/17 18:28, , 7F
那就是你程式執行時出錯直接當掉了 沒跑到main的pause
03/17 18:28, 7F

03/17 20:24, , 8F
恩恩 可是怪的是按下任意鍵後還是會跑出答案= =
03/17 20:24, 8F
文章代碼(AID): #19lsqnW0 (C_and_CPP)
文章代碼(AID): #19lsqnW0 (C_and_CPP)