# include# include # include typedef struct Node //为 struct Node 定义了一个新名字 { int data; //数据域 struct Node * pNext; //指针域 }NODE, *PNODE; //NODE等价于struct Node PNODE等价于struct Node * //函数声明 PNODE create_list(void); void traverse_list(PNODE pHead); int main (void) //主函数 { PNODE pHead = NULL; //等价于struct Node *d = NULL; (指针初始化) pHead = create_list(); //create_list()功能:创建一个非循环单链表,并将该链表的头节点的地址赋给pHead traverse_list(pHead); //对创建的链表进行遍历,需要接收头指针这个变量 return 0; } PNODE create_list(void) //相当于struct Node * create_list ,遍历的时候不需要返回值,用void { int len; //用来存放有效节点的个数 int i; int val; //用来临时存放用户输入的有效节点的值 //分配了一个不存放有效数据的头节点 PNODE pHead = (PNODE)malloc(sizeof(NODE)); if (NULL == pHead) { printf("分配失败,程序终止!n"); exit(-1); } PNODE pTail = pHead; pTail->pNext = NULL; printf("请输入您需要生成的链表结点个数:len = "); scanf("%d",&len); for (i=0;i data = val; //新生成节点的数据域赋给了临时节点val //pHead->pNext = pNew; //把pNew挂到了pHead后面,错误:此时新生成的每一个节点都挂到了头节点上 pTail->pNext = pNew; pNew->pNext = NULL; //初始化每一个节点 pTail = pNew; } return pHead; } void traverse_list(PNODE pHead) { PNODE p = pHead->pNext; while (NULL != p) { printf("%d", p->data); p = p->pNext; } printf("n"); return; }
可能废话的注释有点多hhhh 我注释上来巩固一下
(我用的是cfree写的)



