链表头结点创建
#include<stdio.h>
#include<stdlib.h>
//定义链表结构体
typedef struct Node{
int data; //数据域
struct Node *next; //指针域
}Node , *LinkList;
int main(){
//创建头结点
LinkList head = (Node *)malloc(sizeof(Node));
//判断头结点是否创建成功
if(!head){
printf("头结点空间开辟失败!");
return 0; //如若创建失败直接终止函数
}
//现在头结点的指针域并没有存放新的结点所以现在要给他赋空值
head->next = NULL;
//定义输入数据子函数并传送头结点指针
intput(head);
//定义遍历链表子函数并传送头结点指针
output(head);
}
链表输入数据(尾插法)
//调用函数并把头结点指针传给子函数input
void input(LinkList head){
//判断传过来的head是否为空
if(!head){
return; //如若为空终止函数
}
int value; //定义要输入数据的长度
int i; //循环变量
printf("请输入链表的长度:");
scanf("%d",&value);
//定义一个指针变量来接收头结点head
Node *p = head;
//循环输入链表数据
for(i = 0; i < value; i++){
//申请新的结点空间
Node *q = (Node *)malloc(sizeof(Node));
//输入链表数据
printf("%d",&q->data);
p->next = q; //将新的结点q的地址存放在p的指针域里面
p = p->next; //将p的位置移动至当前q位置,然后再执行上面那条代码创建出新的q结点
}
p->next = NULL; //循环结束,将最后一个结点指针域不指向任何东西,需要赋空值
}
遍历链表
void output(LinkList head){
//判断传过来的head是否为空
if(!head){
return; //如若为空终止函数
}
//定义指针接收head->next就是首元结点,第一个有数据的结点
Node *p = head->next;
//while进行循环条件判断当p不为空就进行循环为空的话跳出循环
while(p){
printf("%d ",p->data); //打印数据
p = p->next; //指针后移,依次遍历每个数据
}
}