※ 引述《killermomo (殺Mo)》之銘言:
: node* reverse(node *phead)
: {
: node *pleft = phead;
: node *pmiddle = pleft->pnext;
: node *pright = pmiddle->pnext;
: while(pright!=NULL)
: {
: pmiddle->pnext = pleft->pnext;
: pleft = pmiddle;
: pmiddle = pright;
: pright = pmiddle->pnext;
: }
: return pmiddle;
: }
看起來是把linked list斷掉沒錯. 一開始三個指標 pleft, pmiddle, pright
分別指頭三個項目. 然後進迴圈第一行說
pmiddle->pnext = pleft->pnext;
但是 pmiddle 就是 pleft->pnext, 在這裡變成一個圈圈,pmiddle繞回來指向自己.
之後就都無效了.
逆轉 linked list 何不沿用抽象的 statck 資料結構概念: 把 list 的頭放到
result 的尾端,
node* reverse(node* list) {
node *result = NULL;
node *p = list;
while (p != NULL) {
list = list->pnext;
p->next = result;
result = p;
p = list;
}
return result;
}
不過這樣做是把輸入的 list 都清光光了. 如果不想要清光光,可以自己做個
傳值呼叫.
--
/yau
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.67.103