今天简单讲解一下关于C语言的尾插法创建新链表,就是在一个指定位置后面插入一个数据。
第一步:创建结构体,这里使用typedef替换函数进行结构体定义,将struct Node用LNode替换。
typedef struct Node
{
int data;//定义数据
struct Node* next;
}LNode;
第二步:1.创建新列表,首先定义LNode指针类型的函数,在函数中对链表的头和尾进行初始化,定义链表长度len和输入数据num,输入链表的长度;
2.然后链表中定义一个中间变量pTemp,有长度进行while循环,给中间变量开辟一个LNode类型空间,让pTemp指向结构体定义的数据data存放的为输入的num数据,下一个指向为空,因为使用尾插法,插入数据后面为空;
3.最后在循环内进行判断如果链表头pHead为空,链表头就等于中间变量,头不为空,链表的尾部就指向下一个数据就是输入的中间变量,长度递减进行循环,返回链表头pHead;
LNode* creatList()
{
//初始化链表的头和尾
LNode* pHead = NULL;
LNode* pTail = NULL;
int len;
int num;
printf("请输入链表的长度:");
scanf_s("%d", &len);
//初始化链表的一个中间变量
LNode* pTemp = NULL;
while (len)
{
printf("请输入数据:\n");
scanf_s("%d", &num);
//给链表的一个中间变量开辟一个空间
pTemp = (LNode*)malloc(sizeof(LNode));
pTemp->data = num;
pTemp->next = NULL;
//空链表
if (pHead == NULL)
{
pHead = pTemp;
}
else
{
pTail->next = pTemp;
}
pTail = pTemp;
len--;
}
return pHead;
}
第三步:循环遍历链表,首先定义遍历函数Print,在函数中判断链表为空时弹出,不为空时,进行循环遍历。
//循环遍历链表
void Print(LNode* pHead)
{
//如果表头为空弹出
if (pHead == NULL)
{
return;
}
//表头不为空进行循环遍历链表
while (pHead)
{
printf("%d ", pHead->data);
pHead = pHead->next;
}
printf("\n");
}
第四步:主函数编写,首先将LNode类型的指针变量pHead初始化,然后将变量放入创建新链表的函数内,最后打印链表。
int main()
{
LNode* pHead = NULL;
pHead = creatList();
Print(pHead);
return 0;
}
综合代码如下:
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;//定义数据
struct Node* next;
}LNode;
LNode *creatList()
{
//初始化链表的头和尾
LNode *pHead = NULL;
LNode* pTail = NULL;
int len;
int num;
printf("请输入链表的长度:");
scanf_s("%d", &len);
//初始化链表的一个中间变量
LNode* pTemp = NULL;
while (len)
{
printf("请输入数据:\n");
scanf_s("%d", &num);
//给链表的一个中间变量开辟一个空间
pTemp= (LNode*)malloc(sizeof(LNode));
pTemp->data = num;
pTemp->next = NULL;
//空链表
if (pHead==NULL)
{
pHead = pTemp;
}
else
{
pTail->next = pTemp;
}
pTail = pTemp;
len--;
}
return pHead;
}
//循环遍历链表
void Print(LNode* pHead)
{
//如果表头为空弹出
if (pHead==NULL)
{
return;
}
//表头不为空进行循环遍历链表
while (pHead)
{
printf("%d ", pHead->data);
pHead = pHead->next;
}
printf("\n");
}
int main()
{
LNode* pHead = NULL;
pHead = creatList();
Print(pHead);
return 0;
}