作者firejox (Tangent)
看板C_and_CPP
標題Re: [問題] About link list reverse
時間Mon Jul 4 19:34:26 2011
※ 引述《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