Re: [問題] 關於單向鏈結串列反轉

看板C_and_CPP作者 (喲)時間14年前 (2011/05/06 13:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
※ 引述《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)
文章代碼(AID): #1DmuthqC (C_and_CPP)
文章代碼(AID): #1DmuthqC (C_and_CPP)