[問題] 鏈表反轉(自己想的一個解法)

看板C_and_CPP作者 (小天)時間9年前 (2014/09/22 23:21), 9年前編輯推噓0(0016)
留言16則, 5人參與, 最新討論串1/1
typedef int elemType; struct node{ elemType data; node *next; }; node *test(node *head, int length)//這裡傳入的head是鏈表的頭指針 { node *mat = new node[length]; for(int i=0; i<length; i++) { mat = head; if(!head->next) break; head= head->next; mat++; } //上面這個for迴圈是想讓new出來的每個指標指向list裡各個node的位置 for(int i=0; i<length; i++) { if(i==length-1) { mat->next = NULL; break; } mat->next = --mat; } //這邊就是要鏈表反轉了,把一個指標指向的node往前一個指標的位置指 delete [] mat;//這邊爆掉了 return head; } 兩個問題: 1.我有試著把mat的值給印出來,發現不太對,為什麼呢? (我跟蹤code確定在第一個 迴圈裡他們有存進去,可是在--mat的時候值不對) 2.delete為什麼爆掉呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1411399266.A.DFB.html ※ 編輯: kdok123 (140.112.25.105), 09/22/2014 23:22:46

09/22 23:46, , 1F
node[length] 怎麼看都不像 pointer array
09/22 23:46, 1F

09/22 23:54, , 2F
我猜你mat想宣成pointer array 可是你宣pointer
09/22 23:54, 2F

09/23 09:09, , 3F
node[length]不是pointer array,是node array沒錯!
09/23 09:09, 3F

09/23 09:10, , 4F
因為不想宣告double pointer所以才這樣寫
09/23 09:10, 4F

09/23 09:11, , 5F
這邊是想讓mat的指標指向對的位置,接著在對他改值
09/23 09:11, 5F

09/23 10:15, , 6F
head是用來作什麼呢?
09/23 10:15, 6F

09/23 10:17, , 7F
mat = head; 這行很奇怪
09/23 10:17, 7F
※ 編輯: kdok123 (140.112.25.105), 09/23/2014 11:24:32

09/23 11:25, , 8F
剛剛加入註釋了! head是鏈表的頭指針
09/23 11:25, 8F

09/23 11:56, , 9F
你是不是誤會什麼了, mat = head 不會置換 node[] 基底
09/23 11:56, 9F

09/23 11:58, , 10F
原本 mat 指向 node[], 你的動作是改成指向 head
09/23 11:58, 10F

09/23 15:07, , 11F
恩恩! 我知道不會置換node,我只是想讓他指向head
09/23 15:07, 11F

09/23 15:07, , 12F
並改head的next而已,為什麼這樣會出錯呢?
09/23 15:07, 12F

09/23 15:08, , 13F
那你的 head 基底++ 之後會指到什麼?
09/23 15:08, 13F

09/23 15:18, , 14F
不過也不用討論這個, array 裡放的非 pointer 要怎麼指
09/23 15:18, 14F

09/23 16:52, , 15F
我超喜歡用Linux kernel list.h,他是個雙向鏈結
09/23 16:52, 15F

09/23 16:54, , 16F
X沒有反轉的問題
09/23 16:54, 16F
文章代碼(AID): #1K83vYtx (C_and_CPP)