(数据结构)单链表的插入删除

代码实现 

#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{int data;struct LNode* next;
}LNode, * LinkList;
//创建头结点
LNode* InitList(LinkList L)
{L = (LNode*)malloc(sizeof(LNode));if (L == NULL){printf("申请头结点失败\n");return NULL;}L->data = 0;L->next = NULL;return L;
}
//判断链表为空
void Empty(LinkList L)
{if (L->next == NULL){printf("链表为空\n");}else{printf("链表不为空\n");}
}
//按位序插入——指定节点的后插操作
//在第i个位置处插入元素e
int ListInsert(LinkList L, int i, int e)
{if (i < 1){printf("选择插入数据的位序错误\n");return 1;}LNode* p;	//指针p指向当前扫描到的节点int j = 0;	//j说明p当前指向的是第几个节点p = L;	//L指向头结点,头结点是第0个节点while (p != NULL && j < i - 1)	//循环指向需要插入的前一个位置{p = p->next;j++;}if (p == NULL){return 1;}LNode* s = (LNode*)malloc(sizeof(LNode));	//申请一个新节点s->data = e;	//给新节点赋值s->next = p->next;	//将新节点连接到p之后p->next = s;return 0;
}
//输出链表
int  Print(LinkList L)
{LNode* P = (LNode*)malloc(sizeof(LNode));if (P == NULL){printf("开辟空间失败\n");return 1;}P = L;while (P->next)	//P->不为空{P = P->next;	//将指针指向头结点的下一位printf("%d ", P->data);}return 0;
}
//指定节点的前插操作
int InsertPriorNode(LinkList L, int e)
{if (L == NULL){return 1;}LNode* s = (LNode*)malloc(sizeof(LNode));if (s == NULL){return 1;}s->next = L->next;L->next = s;	//在要前插的节点后新增一个节点s->data = L->data;	//将要前插节点的数据赋值给新增节点L->data = e;		//将原来节点的数据域赋值为要前插的值return 0;
}
//按位序删除
//删除第i个位置的节点,该节点的数据为e
int ListDelete(LinkList L, int i, int* e)
{if (i < 1){printf("需要删除的位序错误\n");return 1;}LNode* p;int j = 0;p = L;while (p != NULL && j < i - 1){p = p->next;j++;}if (p = NULL){printf("创建指针p失败\n");return 1;}if (p->next == NULL){printf("要删除的节点不存在\n");return 1;}LNode* q;	q = p->next;	//令q指向被删除的节点*e = q->data;	//用e返回元素的值p->next = q->next;	//将q节点从链表中断开free(q);	//释放节点的存储空间return 0;
}
int main()
{LinkList L = (LNode*)malloc(sizeof(LNode));InitList(L);int i, e;scanf("%d", &i);for (int j = 1; j <= i; j++){scanf("%d", &e);ListInsert(L, j, e);}Print(L);	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/234283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公共字段自动填充——后端

场景&#xff1a;当处理一些请求时&#xff0c;会重复的对数据库的某些字段进行赋值&#xff08;如&#xff1a;在插入和更新某个物品时&#xff0c;需要更新该物品的更新时间和更新者的信息&#xff09;&#xff0c;这样会导致代码冗余。 如&#xff1a; 思路&#xff1a; 自…

【经典LeetCode算法题目专栏分类】【第2期】组合与排列问题系列

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 组合总和1 class So…

环境监测升级:钡铼技术的水利环保工业路由器

随着环保意识的提高和科技的发展&#xff0c;环境监测已经成为我们日常生活的重要组成部分。为了满足日益增长的环境监测需求&#xff0c;钡铼技术推出了一款水利环保工业路由器&#xff0c;该路由器具有出色的性能和功能&#xff0c;为环境监测的升级提供了有力支持。 这款工…

6、查询性能优化

为什么查询速度会慢 在编写快速查询之前&#xff0c;需要清楚一点&#xff0c;真正重要的是响应时间。如果把查询看作是一个任务&#xff0c;那么他由一系列子任务组成&#xff0c;每个子任务都会消耗一定的时间。如果要优化查询&#xff0c;实际上要优化其子任务&#xff0c;…

脉冲水表计量方法有哪些?

随着社会的发展和人们对资源的需求不断增长&#xff0c;水资源的有效利用显得尤为重要。而水表作为测量家庭和工业用水的关键设备&#xff0c;其准确性和稳定性对于水资源管理至关重要。本文将重点介绍水表脉冲数计量方法&#xff0c;以帮助读者更好地理解和应用水资源。 一、机…

vue3项目引入电子签名(可横屏竖屏)

实现效果&#xff1a;&#xff08;左边横屏&#xff0c;右边竖屏&#xff09; 前言&#xff1a;【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 &#xff1a;GitHub - linjc/smooth-signature: H5带笔锋手写签名&#xff0c;支持PC端和移动端&#xff0c;任何前…

【超图】SuperMap iClient3D for WebGL/WebGPU ——地形影像

作者&#xff1a;taco 号外&#xff01;号外&#xff01;开新坑了&#xff01;开新坑了&#xff01;对于一个代码小白来讲&#xff0c;设置可能是刚接触开发的人&#xff08;还没接触准备接触&#xff09;的人来说。对于读代码或是在对产品的使用上会存在许许多多的疑惑。接下来…

Linux 如何查看架构和系统

Linux 如何查看架构和系统 在 Linux 系统上&#xff0c;你可以使用一些命令来查看系统的架构&#xff08;architecture&#xff09;和系统信息。以下是一些常用的命令&#xff1a; 查看系统架构&#xff1a; 使用 uname 命令可以显示系统的架构信息。特别是&#xff0c;使用 -…

Ansible(一)

Ansible: 远程操作主机功能&#xff1a; 自动化运维&#xff08;playbook剧本YAML&#xff09; 是基于Python开发的配置管理应用部署攻具&#xff0c;在自动化运维当中&#xff0c;现在是异军突起 Ansible能批量配置&#xff0c;部署&#xff0c;管理上千台主机&#xff0c…

探索 MajicStudio:一款多功能视频编辑软件

一、产品简介 MajicStudio是一款基于人工智能的图片编辑与设计工具&#xff0c;拥有简洁的界面与丰富功能。采用深度学习和计算机视觉技术可以自动识别图片要素。 二、应用场景 MajicStudio的AI图像功能适用于多场景&#xff0c;包括艺术设计、电商、游戏和文创等场景。 三、…

【力扣100】【好题】23.合并k个升序链表

添加链接描述 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:# 21. 合并两个有序链表def mergeTwoLists(self, list1: Optional[ListNode], list2: …

【ranger】CDP环境 更新 ranger 权限策略会发生低概率丢失权限策略的解决方法

一、问题描述&#xff1a; 我们的 kafka 服务在更新&#xff08;添加&#xff09; ranger 权限时&#xff0c;会有极低的概率导致 MM2 同步服务报错&#xff0c;报错内容 Not Authorized。但是查看 ranger 权限是赋予的&#xff0c;并且很早配置的权限策略也会报错。 相关组件…

数据结构与算法-动态规划-地下城游戏

地下城游戏 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某…

DDR4 设计概述以及分析仿真案例(硬件学习)

引言&#xff1a;随着计算机&#xff0c;服务器的性能需求越来越高&#xff0c;DDR4开始应用在一些高端设计中&#xff0c;然而目前关于DDR4的资料非常少&#xff0c;尤其是针对SI(信号完整性)部分以及相关中文资料&#xff0c;另外一方面&#xff0c;DDR4的高速率非常容易引起…

几种常见的模态框

我们在使用uniapp的过程中&#xff0c;是发现有很多各式各样的弹出框供我们选择&#xff0c;我们需要将其变换成不同的形态使用&#xff1b;我们必须清楚主要的组成部分内容&#xff1b;这样才能方便我们使用。 alert&#xff1a;只有一个OK按钮&#xff0c;点击按钮关闭弹框。…

SQL进阶理论篇(十四):CBO优化器是如何计算代价的?

文章目录 简介能调整的代价模型的参数有哪些&#xff1f;mysql.server_costmysql.engine_cost 如何修改这些代价参数&#xff1f;代价模型具体是如何计算的参考文献 简介 大部分RDBMS都支持基于代价的优化器CBO&#xff0c;但其实CBO仍然存在缺陷&#xff08;比如参数配置的不…

Xcode 恢复Discard Changes

当开发的时候&#xff0c;Discard All Changes后 文件的修改都被放弃了&#xff0c;怎么才可以撤销更改呢 Xcode和Git没有这个功能&#xff0c;Finder可以实现 首先我们先退出Xcode用TextEdit打开你想恢复的文件转到文件 > 还原到 > 浏览所有版本...选择你想恢复的版本即…

su命令使用

1 变更到其他用户 su username su命令代表“switch user”&#xff08;切换用户&#xff09;&#xff0c;并不是大多数人想象的“super user”&#xff08;超级用户&#xff09;,能够让某个用户暂时以另一个用户的身份进行操作。当在shell中想快速成为root用户时&#xff0c;…

【Python-批量修改视频分辨率】

Python-批量修改视频分辨率 1 使用Python修改视频分辨率2 常见的视频编码格式2.1 等效的编码格式表示方式2.2 常见的编码格式 1 使用Python修改视频分辨率 首先拷贝视频文件并修改后缀&#xff0c;然后修改图片的分辨率&#xff0c;实现视频批量修改和转换。 import os impor…

3dmax怎么制作软装模型?

软装在室内设计中经常用到&#xff0c;很多人感觉很难&#xff0c;其实也有很多简单的方法&#xff0c;这里介绍一种软装的制作方法。 1、打开3dmax&#xff0c;创建一个切角长方体&#xff0c;对长方体的长和宽进行适当的分段。 2、将切角长方体转换成可编辑多边形。推荐&…