#include <stdio.h>
#include <stdlib.h> //包含了malloc
typedef struct Node {
int data; //数据域
struct Node *next; //指针域
}NODE, *PNODE; //NODE 等价于struct Node, PNODE等价于struct Node *
PNODE create_list(void);
void traverse_list(PNODE phead);
int main(int argc, const char * argv[]) {
PNODE pHead = NULL; //等价于struct Node *pHead = NULL
pHead = create_list(); //创建一个非循环链表, 并将该链表的投节点的地址赋值给头结点
traverse_list(pHead); //
return 0;
}
PNODE create_list(void) {
//分配了一个不存放数据的头结点
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if (pHead == NULL) {
printf("分配失败");
exit(-1);
}
int len;
printf("请输入你要生成的链表节点的个数: ");
scanf("%d", &len);
int i; //存放有效节点的个数
int value; //用来临时存放用户输入的节点的值
PNODE pTail = pHead;
pTail->next = NULL;
for (i = 0; i < len; i++) {
printf("请输入第%d个节点的值: ", i + 1);
scanf("%d", &value);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if (pNew == NULL) {
printf("程序分配失败");
exit(-1);
}
pNew->data = value;
pTail->next = pNew;
pNew->next = NULL;
pTail = pNew; //pTail始终指向为节点
}
return pHead;
}
void traverse_list(PNODE phead) {
PNODE p = phead->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return;
}
网友评论