2025q1 Homework2 (quiz1+2)
contributed by < Hlunlun >
第一周
實做 list_insert_before()
這個函數,並使用到 你所不知道的 C 語言: linked list 和非連續記憶體 中指標指標的技巧
函數定義的參數有三個指標變數,l
指向 list
,before
指向預添加節點後所連接的節點,item
指向預添加節點,三個節點可能會呈現以下
list_insert_before()
主要功能就是將 n3
接在 n2
之前
運用 指標的指標 技巧,首先將指標 p
指向指標 l->head
,指標變數 p
中存放的是 指標 l->head
的記憶體位置,藉由檢查 *p
來避免直接使用空的 l->head
進行迭代
接下來找到指向 *before
的指標,也就是在鍊結串列中進行迭代找到 n1->next
,而指標的指標可以透過 &(*p)->next
取得 *p
指向的節點的 next
的記憶體位置,直到 *p
指向 *before
及停止如下圖
最後將目前 p
指向的指標 n1->next
指向 *item
(也就是 n3
),最後用 n3->next
將 *before
(也就是 n2
) 接在 n3
後面,至此即完成實做 list_insert_before()