linux链表之:使用for循环添加链表、list_add、list_add_tail
linux链表之:使用for循环添加链表、list_add、list_add_tail
使用for循环,向链表中添加10个节点
如果使用list_add,则将节点添加到链表头,那么使用后面的list_for_each打印时,便是倒着的:
*********************************************
index:9, name:name9
index:8, name:name8
index:7, name:name7
index:6, name:name6
index:5, name:name5
index:4, name:name4
index:3, name:name3
index:2, name:name2
index:1, name:name1
index:0, name:name0
*********************************************
如果使用list_add_tail,则将节点添加到链表尾,那么使用后面的list_for_each打印时,便是顺序打印的:
*********************************************
index:0, name:name0
index:1, name:name1
index:2, name:name2
index:3, name:name3
index:4, name:name4
index:5, name:name5
index:6, name:name6
index:7, name:name7
index:8, name:name8
index:9, name:name9
*********************************************
源码如下:
root@ubuntu:/mnt/shared/kernelbox/list# cat listuse.c #include "list.h" struct stListUse { char name[32]; int index; struct list_head list; }; LIST_HEAD(list_use_head); struct stListUse *pstListNode; int main(int argc, char *argv[]) { int i; char nametmp[32]; struct stListUse *pstListTmp; struct list_head *tmp; printf("enter listuse.c/main()\n"); for(i=0; i<10; i++) { pstListNode = (struct stListUse *)malloc(sizeof(struct stListUse)); memset(pstListNode, 0, sizeof(struct stListUse)); /* init node i */ pstListNode->index = i; sprintf(nametmp, "name%d", i); strcpy(pstListNode->name, nametmp); /* add node i to list list_use_head */ #if 0 list_add(&pstListNode->list, &list_use_head); #endif list_add_tail(&pstListNode->list, &list_use_head); } pstListTmp =(struct stListUse *)malloc(sizeof(struct stListUse)); /* print list */ printf("*********************************************\n"); list_for_each(tmp, &list_use_head) { pstListTmp = list_entry(tmp, struct stListUse, list); printf("index:%d, name:%s\n", pstListTmp->index, pstListTmp->name); } printf("*********************************************\n"); return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。