#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