#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdlib.h>
//---【1】创建结点数据类型
typedef struct node
{
int data;
struct node* pnext;
} NODE, * PNODE;
PNODE creat_list(void);
void travel_list(PNODE phead);
int main(void)
{
//---------------------------------------【2】写框架----------------
PNODE phead = NULL;
//----【3】创建链表---
phead = creat_list(); //要在这个函数里创建链表,在下一个函数里使用,就要用动态分配内存
//--- 【4】遍历链表--
travel_list(phead);
return 0;
}
PNODE creat_list(void)
{
//【3.1】创建头指针
PNODE phead = (PNODE)malloc(sizeof(PNODE));
//【3.2】创建新指针
//PNODE pnew = (PNODE)malloc(sizeof(PNODE));
//【3.3】创建尾指针
PNODE ptail;// = (PNODE)malloc(sizeof(PNODE))
ptail = phead;
ptail->pnext = NULL;
//【3.4】定义链表长度和链表的内容
int len, val;
//【3.5】提示用户输入长度
printf("请输入链表的长度");
scanf("%d", &len);
//【3.6】输入每一个节点的内容
for (int i=0;i<len;++i)
{
printf("请输入第%d个结点的值",i+1);
scanf("%d", &val);
//【3.7】把输入内容给到节点
PNODE pnew = (PNODE)malloc(sizeof(NODE));//这个函数不能写在for循环外面,因为这是一个新的节点
pnew->data = val;
//【3.8】尾指针指向新的节点
ptail->pnext = pnew;//挂,把新生成的节点挂到ptail
//【3.9】新指针
pnew->pnext = NULL;//新节点成为左后一个,所以清空
//【3.10】 尾结点重新指向最后
ptail = pnew;
}
return phead;
}
void travel_list(PNODE phead)
{
PNODE p = phead->pnext;
while (NULL != p)
{
printf("%d",p->data);
p = p->pnext;
}
printf("\n");
}