单链表操作-C语言
- C语言
- 2024-04-06
- 4681热度
- 0评论
单链表操作-C语言
描述:
用户输入 3 4 5 6 7 9999一串整数,9999代表结束,通过头插法新建链表,并输出。通过尾插法新建链表,并输出。
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
} LNode, *LinkList;
//头插法新建链表
LinkList HeadCreatList(LinkList &L){
LNode *s;
int x;
L=(LinkList) malloc(sizeof(LNode)); //带头结点的链表
L->next=NULL; //良好习惯,头结点指向NULL,避免脏数据,L->data为空
scanf("%d",&x); //从标准输入读取数据 3 4 5 6 7 9999
while(x!=9999)
{
s=(LNode *) malloc(sizeof(LNode)); //申请内存空间给结点s,并进行强制类型转换
s->data=x; //scanf读取的数据,赋予新空间中的data成员
s->next=L->next; //让新节点的next指针指向链表的第一个元素
L->next=s; //头指针指向第一个元素
scanf("%d",&x); //循环读取数据
}
return L;
}
//尾插法新建链表
LinkList TailCreatList(LinkList &L){
int x;
L=(LinkList) malloc(sizeof(LNode)); //带头结点的链表
LNode *s,*r=L; //r代表链表表尾指针,指向链表尾部,初始化都指向头结点
scanf("%d",&x); //从标准输入读取数据 3 4 5 6 7 9999
while(x!=9999)
{
s=(LNode *) malloc(sizeof(LNode)); //申请内存空间给结点s,并进行强制类型转换
s->data=x; //scanf读取的数据,赋予新空间中的data成员
r->next=s; //尾部结点指向新节点(指向新节点,从而将新节点连接到链表的尾部)
r=s; //指向新的表尾结点(永远保持r指向最后一个结点)
scanf("%d",&x); //循环读取数据
}
r->next=NULL;
return L;
}
//打印链表中每个结点的数据
void PrintList(LinkList L){
L=L->next; //让L指向第一个有数据的结点
while (L!=NULL)
{
printf("%d",L->data); //打印当前结点数据
L=L->next; //指向下一个结点
if(L!=NULL)
{
printf(" ");
}
}
}
int main() {
LinkList L=NULL; //链表头,结构体指针类型
LinkList search; //存储读取到的某个结点
HeadCreatList(L); //头插法建立链表
PrintList(L); //打印链表
TailCreatList(L); //尾插法建立链表
PrintList(L); //打印链表
return 0;
}