contributed by < chrisliu430
>
4846696
先使用 malloc
對 list_head
做記憶體分配的動作,接下來檢測是否有分配,若沒有分配就回傳 NULL
;若有分配則對 struct list_head
做初始化,將 prev
及 next
指回自身位址。
參考 laneser 得知
list.h
中有提供INIT_LIST_HEAD
可以使用
b3d85fe
4846696
先判斷 head
是否為不存在,若不存在則 Queue Size
為0;存在時在利用 list_head
環形結構計算 Queue
中內存有多少元素,結束條件為節點被指派的位址與 list_head
的開頭相同。
宣告
struct list_head
的指標時,並沒有給予初始值,於是往內移至for loop
內
b3d85fe
4846696
先分配記憶體空間給 element_t
作為要被儲存的元素的節點,接下來才判斷串接資料的節點 head
是否不存在或分配 element_t
空間時是否有分配,若沒有就將剛剛分配給予 element_t
的空間給釋;若 head
存在及 element_t
有分配到記憶體的情況下,則將使用 strdup
對要儲存的字串分配記憶體空間,並採用在 list.h
中現有的 list_add
對新增節點加入在開頭的部份。
參考 laneser 的開發筆記,對於
insert
的處理是先判斷head
是否存在。
我的寫法是先創建element_t
再判斷可否正常插入node
,這個寫法雖然可以正常用作,但根據所查詢的資料 Is it good practice to free a NULL pointer in C? 中提到不要對NULL
指標坐存取,原因是因為會多存取不必要的程式碼,即使free
函式傳入NULL
不會發生任何問題。
b3d85fe
4846696
先分配記憶體空間給 element_t
作為要被儲存的元素的節點,接下來才判斷串接資料的節點 head
是否不存在或分配 element_t
空間時是否有分配,若沒有就將剛剛分配給予 element_t
的空間給釋;若 head
存在及 element_t
有分配到記憶體的情況下,則將使用 strdup
對要儲存的字串分配記憶體空間,並採用在 list.h
中現有的 list_add_tail
對新增節點加入在結尾的部份。
b3d85fe