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

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