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...