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