#include?<stdio.h> #include?<malloc.h> #include?<stdlib.h> ? struct?Node{ int?data; struct?Node?*?pNext; }; ? struct?Node?*?createList(void){ int?len;???????//存放有效节点的个数 int??i; int??val;??????//用来临时存放用户输入的节点的值 ? struct?Node?*?pHead?=?(struct?Node?*)malloc(sizeof(struct?Node)); if?(NULL?==?pHead)?{ printf("分配失败程序终止!\n"); exit(-1); } struct?Node?*?pTail?=?pHead; pTail->pNext=NULL; ? printf("请输入要生成链表的节点个数:?len="); scanf_s("%d",?&len); ? for?(int?i?=?0;?i?<?len;?++i){ ? printf("请输入第%d个节点的值:",?i?+?i); scanf_s("%d",&val); ? struct?Node?*?pNew?=?(struct?Node?*)malloc(sizeof(struct?Node)); if?(NULL?==?pNew)?{ printf("分配失败程序终止!\n"); exit(-1); } ? pNew->data?=?val; pTail->pNext?=?pNew; pNew->pNext?=?NULL; pTail?=?pNew; } return?pHead; }; ? bool?empty_list(struct?Node?*?pHead)?{ if?(pHead->pNext?==?NULL)?{ return?true; }else{ return?false; } ? } ? void?TraverseList(struct?Node?*?pHead?)?{ ? if?(empty_list(pHead))?{???//判断链表是否为空 printf("链表为空"); }else?{ ???????//链表操作 } ? //优化链表操作 struct?Node?*?p?=?pHead->pNext; while?(NULL!=p){ printf("%d\n",?p->data); ? p?=?p->pNext; } ? return; } ? int?main(void)?{ ? struct?Node?*?pHead=NULL;?//头指针(存放链表头结点地址) pHead?=?createList();??//构建一个链表 TraverseList(pHead);???//操作链表 }
原文:https://blog.51cto.com/u_15174292/2801291