※ 引述《tkcn (小安)》之銘言:
: 所以不難想像,迴圈大概長這樣:
: while (....) {
: pmiddle.pnext = pleft;
: pleft = pmiddle;
: pmiddle = pright;
: pright = pright.pnext;
: }
: 只要在紙上照著步驟做一遍就會了解了,
: 你也會知道在這迴圈開始之前和結束之後,
: 各還有一個步驟我沒有寫出來。
: 最後是 boundary case,如果整個 list 只有一個 node,
: 你的程式能正常處理嗎?
重點在 pmiddle->pnext 改成 pleft, 所以三元項再往左移一步,變成:
node* reverse(node* list) {
if (list == NULL) return NULL;
node *pleft, *pmiddle, *pright;
pleft = NULL;
pmiddle = list;
pright = list->pnext;
while(pmiddle != NULL) {
pmiddle->pnext = pleft;
pleft = pmiddle;
pmiddle = pright;
if (pright != NULL)
pright = pright->pnext;
}
return pleft;
}
--
/yau
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.112.229.16
※ 編輯: yauhh 來自: 59.112.229.16 (05/06 14:02)