linux链表之:使用for循环添加链表、list

linux链表之:使用for循环添加链表、list_add、list_add_tail

使用for循环,向链表中添加10个节点

如果使用list_add,则将节点添加到链表头,那么使用后面的list_for_each打印时,便是倒着的:

*********************************************index:9, name:name9index:8, name:name8index:7, name:name7index:6, name:name6index:5, name:name5index:4, name:name4index:3, name:name3index:2, name:name2index:1, name:name1index:0, name:name0*********************************************

如果使用list_add_tail,则将节点添加到链表尾,那么使用后面的list_for_each打印时,便是顺序打印的:

*********************************************index:0, name:name0index:1, name:name1index:2, name:name2index:3, name:name3index:4, name:name4index:5, name:name5index:6, name:name6index:7, name:name7index:8, name:name8index: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;}

因为有了梦想,我们才能拥有奋斗的目标,

linux链表之:使用for循环添加链表、list

相关文章:

你感兴趣的文章:

标签云: