contributed by <haoyu0970624763>
功能:新增節點在 list 最後面
new_value
賦值給new_node->value
, new_node->next
指向 NULL
AA1
跟 AA2
選項很少,很好判斷
功能:找到特定值的節點
功能:刪除特定節點並釋放空間
功能:交換 list 中第 i 個節點跟第 i+1 節點的位置(i屬於奇數)
4-5 行
node
為指向 &head
的 pointer
tmp
先紀錄 node pointer 指向的位址 , 也就是&list[i]
第 8 行 tmp->next = (*node)->next ;
由於函式為 swap_pair , 所以 tmp->next
應為 list[i+1]->next
因此我們可判斷 BB2
為 *node = (*node)->next;
執行完 *node = (*node)->next;
執行完 tmp->next = (*node)->next;
執行完 (*node)->next = tmp;
迴圈下一層
已經換完前面兩個 , node 變數應跳到 list 中 , 指向後兩個成員的位址 , 進行下一次的 swap
所以 BB1
為 node = &((*node)->next->next)
功能:把 list 反過來連接
head
表走訪 list 過程中的當前節點 , 從 list 最前端開始
cursor
表示上次走訪的節點
next
表當前節點的下一個節點
從第 8 行 head = next;
我們可以推斷出 CCC 應將上次走訪的節點串接在當前節點後面,還有更新上次走訪的節點以利用在下次迴圈中
所以 CCC
= head->next = cursor; cursor = head;
概念如下
執行 head->next = cursor;
執行 cursor = head;
與 head = next;
執行迴圈下一層
執行第二次的 head->next = cursor;
同樣的邏輯繼續下去即可求的反的 list
功能:印出節點的值
原本的 swap_pair
中的 head
在函式內部採用 call by value , 改動 head
時 , 實際上不會改動到原本的head
, 是更改複製出來的 head
可以用call by reference 的方式來避免此狀況
下面是改寫的程式碼
透過 call by reference 取代原本 call by value 的參數傳遞方式
將上面的 reverse 函式的概念用遞迴的方式加以實做