看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《cora (大熱豔陽天)》之銘言: : c語言 : Question:Link list reverse code不了解 : Input):一串數值 : Expected Output):反轉 : 一直搞不懂原因,煩請了解的指導一二或圖解…初碰point實在不容易啊 : //global: : typedef struct Node { : int data; : struct Node *next; : }LinkList; : int link_reverse(LinkList **reverse, LinkList *merge) : { : //merge:為任意一串數值 : //reverse:為反轉後output : LinkList *in = NULL, *ptr1 = NULL, *new = NULL; : in = merge; : while (in != NULL) { : ptr1 = in->next; : in->next = new;//*** ?????看不懂用意????? ***// : new = in;//*** ?????new為何不會被替換????? ***// : in = ptr1; : } : *reverse = new; : return 0; : } 紙筆一畫就很明瞭了... merge: █ → █ → █ → █ → █ → █ → █ 一開始: █ → █ → █ → █ → █ → █ → █ ↑ ∣ ↑ in ∣ ptr1 ↓ in->next new(NULL) new = in ↓ 接著: █ → (NULL) █ → █ → █ → █ → █ → █ ↑ ptr1 new ↓ 接下來: █ → (NULL) █ → █ → █ → █ → █ → █ ↑ in = ptr1 ------------------------------------------------------------- 第二次: new ↓ █ → (NULL) (下一步)∣ in->next ↓ █ → █ → █ → █ → █ → █ ↑ ↑ in ptr1 ┌─new n │ ↓ e │ █ → (NULL) w │ ↑   ∥│ ∣in->next i │ ∣ n └→█ █ → █ → █ → █ → █ ↑ ↑ in ptr1 ※ 編輯: firejox 來自: 123.240.129.15 (07/04 20:29)
tjjh89017:推啊,倒是比較想知道為甚麼在 07/04 20:27
tjjh89017:前面輸入LinkList **reverse這格雙重指標??? 07/04 20:28
※ 編輯: firejox 來自: 123.240.129.15 (07/04 20:30)
firejox:我不知道用雙重指標的用意... 07/04 20:44
tjjh89017:蠻詭異的,直接回傳指標回去可以嗎? 07/04 20:47
james732:你可以改成一個星星,就知道它們的差別了 07/04 20:49
james732:直接回傳當然也可以,不過呼叫端要記得把回傳結果存起來 07/04 20:49
tjjh89017:開雙重指標適用於回傳值嗎? 07/04 21:47
tjjh89017: 是 07/04 21:49
firejox:你用回傳值就不要加雙重指標 07/04 22:07
tjjh89017:我的意思是說,不用return,但有回傳的效果 07/05 11:33
firejox:不用return 又要有回傳效果?1.全域 2.從參數 07/05 20:50
VictorTom:推圖:) 07/05 23:09
stonehomelaa:C只有call by value 所以如果只傳pointer 那裡面的 07/05 23:48
stonehomelaa:reverse只能操作到複製出來的東西 07/05 23:50
stonehomelaa:caller這邊的pointer不會改到 07/05 23:50
firejox:要改 1從指標位址改 2給指標新的值 07/05 23:59