C语言单链表的修改、插入(前中后三个位置)、删除(删单个元素与整条链表删除)

本文主要是介绍C语言单链表的修改、插入(前中后三个位置)、删除(删单个元素与整条链表删除),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

还不太了解单链表如何创建的同学请点击链接
https://blog.csdn.net/tongjingqi_/article/details/105831323
想了解单链表的排序和查找的同学请点击
https://blog.csdn.net/tongjingqi_/article/details/105927156
本篇实现单链表的插入删除修改

#include <stdio.h>
#include <stdlib.h>
struct node
{int data;struct node *next;
};
struct node* add_head(struct node* head,int x)//实现在开始结点前增加一个新结点
{struct node *p=(struct node *)malloc(sizeof(struct node));p->next=head;p->data=x;head=p;return head;
}
void add_tail(struct node* head,int x)//实现在最后一个结点增加新结点
{struct node *p=(struct node *)malloc(sizeof(struct node));struct node *q=(struct node *)malloc(sizeof(struct node));q->next=NULL;q->data=x;for(p=head;p->next!=NULL;p=p->next);//找到最后一个结点p->next=q;//把最后一个结点指向新增的结点
};
struct node* insert(struct node* head,int x)//把x插在第一个大于x的数之前
{struct node *p=(struct node *)malloc(sizeof(struct node));struct node *q=(struct node *)malloc(sizeof(struct node));struct node *r=(struct node *)malloc(sizeof(struct node));for(p=head,q=head;p->data<x&&p->next!=NULL;p=p->next)q=p;//找到插入点的前后两个指针q和p,注意赋值顺序if(p==head)head=add_head(head,x);//头部插else if(p->next==NULL)add_tail(head,x);//尾部插else{中间插r->data=x;r->next=p;q->next=r;}return head;
}
struct node* Delete(struct node* head,int x)//删除值为x的结点
{struct node *p=(struct node *)malloc(sizeof(struct node));struct node *q=(struct node *)malloc(sizeof(struct node));for(p=head,q=head;p->data!=x&&p->next!=NULL;q=p,p=p->next);//先找到x的位置if(p==head){head=p->next;//x是第一个数据的情况free(p);}else {q->next=p->next;//直接把被删结点的前一个结点的next指向被删结点后一个结点free(p);}return head;
};
void Delete_alvl(struct node* head)//整条链表的删除
{struct node *p=(struct node *)malloc(sizeof(struct node));struct node *q=(struct node *)malloc(sizeof(struct node));for(p=head,q=head;q!=NULL;q=q->next,free(p),p=q);
}
struct node* change(struct node* head,int x,int y)
{struct node *p=(struct node *)malloc(sizeof(struct node));for(p=head;p!=NULL;p=p->next){if(p->data==x){p->data=y;return p;}}
}
int main()
{int i,n;scanf("%d",&n);struct node *p,*q,*head=NULL;for(i=0;i<n;i++)//创建链表{p=(struct node *)malloc(sizeof(struct node));scanf("%d",&(p->data));if(head==NULL)head=p;else q->next=p;q=p;}p->next=NULL;for(p=head;p!=NULL;p=p->next)//遍历链表并输出{printf("%d ",p->data);}printf("\n");head=add_head(head,100);//add_tail(head,77);head=insert(head,-1);head=insert(head,101);head=insert(head,4);for(p=head;p!=NULL;p=p->next){printf("%d ",p->data);}printf("\n");head=Delete(head,4);for(p=head;p!=NULL;p=p->next){printf("%d ",p->data);}printf("#");p=change(head,1,111111);if(p!=NULL)printf("%d",*p);Delete_all(head);return 0;
}

在这里插入图片描述

这篇关于C语言单链表的修改、插入(前中后三个位置)、删除(删单个元素与整条链表删除)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910703

相关文章

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当