看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)