linux 鍊錶及相關鍊錶操作

2021-10-08 01:36:22 字數 1538 閱讀 4742

1.鍊錶結構體

struct list_head
2.list_entry

#define container_of(ptr, type, member)\

container_of(ptr, type, member)

//ptr為list_head指標,type為包含list_head結構體物件型別,

//member為鍊錶結構體變數名

3.鍊錶初始化

init_list_head()

#define list_head_init(name)

#define list_head(name) \

struct list_head name = list_head_init(name)

static inline void init_list_head(struct list_head *list)

4.鍊錶操作

list_add(sturct list_head *new, struct list_head *head)

//head 前加入new( 棧)

list_add_tail(sturct list_head *new, struct list_head *head)

//head後加入new(佇列)

list_del(struct list_head *entry)

//不刪除entry資料結構

list_move(struct list_head *list, struct list_head *head)

//list移除加到head後面

list_move_tail(struct list_head *list, struct list_head *head)

//list移除加到head前面

list_empty(struct list_head *head)

//鍊錶是否為空

list_splice(struct list_head *list, struct list_head *head)

//連線兩個鍊錶

5.遍歷鍊錶

list_for_each(pos,head)

//pos遍歷當前position,head煉表頭

list_for_each_entry(pos, head, member)

//pos為包含list_head節點物件的指標,head為頭節點指標,member為pos中list_head結構變

//量名

list_for_each_entry_reverse(pos, head, member)

//反向遍歷

list_for_each_entry_safe(pos, next, head, member)

list_for_each_entry_safe_reverse(pos, next, head, member)

//next與pos型別一致

鍊錶,反向鍊錶的相關操作

假設鍊錶節點的資料結構為 struct node 建立單鏈表的程式為 struct node create unsigned int n node p head for unsigned int i 1 i n i return head 問題1 鍊錶逆置 思想為 head指標不斷後移,指標反向即可...

鍊錶操作相關考點及技巧

找到鍊錶的中間節點 找到鍊錶的倒數第n個節點 合併排序鍊錶 翻轉鍊錶 翻轉前n個節點 翻轉 m,n 內的節點 使用哨兵dummy節點做頭,簡化程式設計,比如鍊錶相加之類 k 個一組反轉鍊錶,也是使用遞迴 下乙個更大的數,採用單調棧,但是需要從右往左遍歷,所以採用遞迴方式,把單調棧作為引數傳入,返回是...

鍊錶的相關操作

連線兩個迴圈單鏈表 p a next 儲存a表的頭結點位置 a next b next next b的開始結點鏈結到a表尾 free b next b next p return b 注 a,b為已構建好的迴圈鍊錶,具有尾指標 鍊錶中的環附 include include struct node s...