#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
LNode* Create();
bool InsertData_Tail(LNode *L, int num);
void ViewData(LNode *L);
bool InsertData_Head(LNode *L, int num);
int main()
{
int num = 1;
LNode *L = Create(); //调用函数创建头结点
InsertData_Tail(L, num); //调用函数向单链表中插入数据
ViewData(L); //循环遍历所有数据
InsertData_Head(L, num); //头插法向单链表插入数据
ViewData(L);
return 0;
}
//创建头结点
LNode* Create()
{
LNode *L = (LNode*)malloc(sizeof(LNode)); //动态申请内存
if(L == NULL) //判断是否创建成功
printf("创建头结点失败!\n");
printf("成功创建头结点!\n");
return L; //返回头指针
}
//尾插法创建单链表
bool InsertData_Tail(LNode *L, int num)
{
int i = num; //循环次数以及插入的数据
LNode *q = L; //创建一个指向尾节点的指针
printf("*******尾插法********\n");
while(i < (num + 5)) //循环插入数据
{
LNode *p = (LNode*)malloc(sizeof(LNode)); //动态申请一个节点
p->next = NULL; // 初始化(很关键!)
if(p == NULL)
return false;
p->data = i; //向新节点赋值
q->next = p; //将新节点链接入链表
q = p; //将尾部指针指向新的尾结点
i++;
}
return true;
}
//头插法创建单链表
bool InsertData_Head(LNode *L, int num)
{
int i = num;
LNode *q = L; //创建指向头节点的指针
printf("******头插法********\n");
while(i < (num + 10))
{
LNode *p = (LNode*)malloc(sizeof(LNode)); //创建新节点
p->next = NULL; // 初始化(很关键!)
if(p == NULL)
return false;
p->data = i; //赋值
p->next = q ->next; //将新节点接入
q->next = p; //使头指针指向新节点
i++;
}
return true;
}
//遍历所有数据
void ViewData(LNode *L)
{
int i = 1;
LNode *q = L->next; //指向第一个节点
while(q->next !=NULL)
{
printf("第%d个节点,存储数据为%d!\n", i, q->data); //打印
q = q->next; //指针向后移动
i++;
}
}
写死的,没有交互,有个意思就可以了。
哈哈-。-