//链表操作
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//定义一个结构体包含数据域和指针域,指针域存放下一个节点的地址
typedef struct Node{
	int data;
	struct Node * pNextNode;
}NODE,*PNODE;
//创建一个链表,返回第一个节点的地址
PNODE createNodeLink(void);
//遍历链表,参数为第一个节点的地址
void traverseLinked(PNODE pHead);
int main(void){
	//创建链表
	PNODE pHead = createNodeLink();
	//遍历链表
	traverseLinked(pHead);
	getchar();
	return 0;
}
//创建链表,,下一个创建的节点的pNextNode指向上一个创建的节点,即从后往前创建
PNODE createNodeLink(void){
	//中间变量,用于保存上一个节点
	PNODE pNodeTail = (PNODE)malloc(sizeof(NODE));
	if(pNodeTail == NULL){
		printf("分配失败,程序终止!\n");
		exit(-1);
	}
	int len = 7 ,i,val;
	i = 0;
	printf("请输入您要生成的链表的节点的个数:");
	scanf("%d",&len);
	for(i = 0;i < len;i++){
		printf("请输入%d个节点的值:\n",i+1);
		scanf("%d",&val);
		PNODE pNew = (PNODE)malloc(sizeof(NODE));
		if(pNew == NULL){
			printf("分配失败,程序终止!\n");
			exit(-1);
		}
		pNew->data = val;
		if(i == 0){
			pNew->pNextNode = NULL;
		}else{
			pNew->pNextNode = pNodeTail;
		}
		pNodeTail = pNew;
	}
	//循环完成,pNodeTail刚好指向第一个节点
	return pNodeTail;
}
//遍历链表
void traverseLinked(PNODE pHead){
	PNODE pTemp = pHead;
	while(pTemp != NULL){
		printf("%d\t",pTemp->data);
		pTemp = pTemp->pNextNode;
	}
}