C语言单链表的创建,修改,插入等
#include
#include
#include
typedef struct LNode{
int data;
struct LNode* next;
}ListNode,*LinkList;
LinkList initList(LinkList L){ //头节点,第一个节点的数据域不存放数据
//头节点指针
L = (LinkList)malloc(sizeof(ListNode));
//分配空间,L是一个指针
if(L==NULL){
printf("%s","location space fail");
exit(1);
}
L->next = NULL;
return L;
}
LinkList creatListHead(int n){//头插法建立链表
LinkList L;
ListNode *p;
L = initList(L);
int x;
while(n--){
p = (ListNode *)malloc(sizeof(ListNode));
scanf("%d",&x);
p->data = https://www.it610.com/article/x;
p->next=L->next;
//把L的next赋值给p
L->next = p;
//让头指针指向新插入的节点
}
return L;
}
LinkList createListRear(int n){//尾插法建立链表
int x = 0;
ListNode *L,*r,*p;
L = initList(L);
//初始化头节点
r = L;
// 把头节点赋值给尾节点,让尾指针指向头节点
//int arr[5] = {1,2,3,4,5};
while(n--){
scanf("%d",&x);
//必须加&,这样才会改变x的数值,不然下面赋值的时候就是赋x没有输入的值
p = (ListNode *)malloc(sizeof(ListNode));
// 建立一个新的节点
p->data = https://www.it610.com/article/x;
p->next = NULL;
//尾插法最后一个元素的指针域总是为空
r->next = p;
//把尾指针指向新插入的节点
r = p;
//将新的节点作为尾指针,即将p赋值给r,在这里,
//r只是一个尾指针,负责的只是指向谁的问题,我们将
//p赋值给r,那么r就指向p
}
return L;
//返回头节点,因为 r=L,即尾指针一开始是指向头节点的
}
void outputs(LinkList L){
LinkList p = L->next;
for(;
p!=NULL;
p=p->next){
printf("%d\n",p->data);
}
printf("\n");
}
LinkList FindByValue(LinkList L,int value){ //值查找
LinkList p = L->next;
int i=0;
while(p!=NULL){
i++;
if(p->data=https://www.it610.com/article/=value){
printf("%d\n", p->data);
printf("%s\n", "序号是");
printf("%d\n", i);
}
p=p->next;
}
}
LinkList FindByIndex(LinkList L,int n){//序号查找
LinkList p = L->next;
if(n==0){
printf("%d",p->data);
}
if(n<1){
printf("%s","序号错误");
}
while(--n&&p!=NULL){
//printf("%d\n",n);
p = p->next;
}
printf("%d\n",p->data);
}
LinkList insert(LinkList L,ListNode *p,int n){//插入数据
LinkList head = L->next;
//头节点是空的,不存数据
while(--n){
head = head->next;
}
p->next = head->next;
head->next = p;
outputs(L);
return L;
}
ListNode *deletePoint(ListNode *L, int n){//删除结点
ListNode *p = L->next;
n = n-1;
while(--(n)){//相当于(n-2)--
p = p->next;
}
ListNode *q;
//保存要删除的指针
q = p->next;
p->next = q->next;
outputs(L);
free(q);
return L;
}
int length(LinkList L){
int count = 0;
while(L->next!=NULL){
L = L->next;
count++;
}
return count;
}
int main(){
//LinkList L =createListRear(2);
LinkList H =createListRear(5);
ListNode *p;
p = (LinkList)malloc(sizeof(ListNode));
p->data = https://www.it610.com/article/12;
H = insert(H,p,2);
H = deletePoint(H,2);
printf("%d\n",length(H));
//FindByIndex(H,2);
//FindByValue(H,31);
//printf("%d",H->next->data);
//outputs(H);
return 0;
}
【C语言单链表的创建,修改,插入等】
推荐阅读
- python蓝桥杯|python蓝桥杯基础练习 十六进制转八进制
- 刷题记录|【蓝桥必胜】试题 算法训练 kAc给糖果你吃-贪心排序
- Python|蓝桥杯 平面切割 Python
- Python|Python 每日一练 二分查找 搜索旋转排序数组 详解
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题
- 遇见蓝桥遇见你|小唐开始刷蓝桥(三)2018年第九届C/C++ B组蓝桥杯省赛真题
- 蓝桥信用卡号验证 JAVA纯暴力破解
- Java基础|信用卡校验
- 算法训练 一元三次方程求解 蓝桥杯