[問題] 一般化串列反轉 救命 我造太多口業了><
我玩一個下午,現在腦袋已經絞成一團了><
指標觀念不清楚所以幹了很多蠢事= =
大致上是跑出來了
只是存在兩個疑點
(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
03/17 17:57, 1F
→
03/17 17:58, , 2F
03/17 17:58, 2F
→
03/17 17:58, , 3F
03/17 17:58, 3F
→
03/17 17:59, , 4F
03/17 17:59, 4F
→
03/17 18:20, , 5F
03/17 18:20, 5F
推
03/17 18:28, , 6F
03/17 18:28, 6F
推
03/17 18:28, , 7F
03/17 18:28, 7F
→
03/17 20:24, , 8F
03/17 20:24, 8F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章