单链表的插入与删除

article/2025/9/20 9:00:09

链表是数据结构中的一种线性结构,表示数据运算之间的一种抽象关系。

1、单链表的结构如下:

typedef struct node{datatype data;  //数据struct node *next; //指向下一个节点的指针
}linklist_s;

        其中包括一个数据域和一个指针域,向单链表中插入成员时只需要再次分配一个同样的变量,让上一个变量中的指针域指向下一个节点即可,比起顺序表来说,链表更加灵活。

2、单链表的创建

        *先创建链表头,将指针域指向NULL,将数据域设置0


linklist_s *LinkListCreate(void)
{linklist_s *h;//定义一个linklist_s结构体类型的变量 *hh = (linklist_s *)malloc(sizeof(*h));//通过malloc申请内存空间h->data =0;     //将数据域设值为0h->next = NULL;  //指针域指向空return h;
}

3、单链表的插入

       *头插法:

                

        *尾插法:

                

        *位置插法:

                 

 头插法代码如下:

(尾插法与位置插法只需要找到位置之后插入节点,本质上与头插法是一样的)

//头插法:
int LinkListInsert(linklist_s *h,datatype data)
{linklist_s *tmp;tmp = (linklist_t *)malloc(sizeof(*tmp));//1.分配临时的节点,将data放入到节点的数据域中tmp->data = data;//2.将tmp插入到节点中tmp->next = h->next;h->next = tmp;//3.成功返回0return 0;
}

4、单链表的删除

        *头删法

                

        *尾删法      

                

            *位置删法

                

  头删法代码如下:

(尾删法与位置删法只需要找到位置之后删除节点,本质上与头删法是一样的)


int LinkListDeleteHead(linklist_s *h)
{linklist_s *tmp;//1.让tmp指向要删除的节点tmp = h->next;//2.让h->next指向下下一个节点h->next = h->next->next;//3.释放节点占用的内存if(tmp != NULL){free(tmp);tmp = NULL;}return 0;
}

如何找到要删除的位置?

           //尾删法:让h->next->next走到NULL的位置

   //尾删法:让h->next->next走到NULL的位置while (h->next->next != NULL) {h = h->next;}

          //位置删法:(pos为要删除的位置)

while (h->next != NULL) {if (pos != 0) {pos--;h = h->next;} 

***********如何将一个正序的单链表倒置呢?*********


void LinkListReverse(linklist_s *h)
{linklist_s *tmp,*iter;//让iter指针指向头节点之后的节点iter = h->next;//先让h->next指向空,意思链表中没有任何的节点h->next = NULL;//如果iter不为空,循环继续while(iter){//让tmp取到第一个节点tmp = iter;//让iter指向下一个节点iter = iter->next;//使用头插法将tmp插入到h之后tmp->next = h->next;h->next = tmp;}
}

 未完待续............


http://chatgpt.dhexx.cn/article/utpBDb1a.shtml

相关文章

详解单链表(内有精美图示哦)

全文目录 引言链表链表的定义与结构链表的分类 单链表的实现及对数据的操作单链表的创建与销毁创建销毁 单链表的打印单链表的头插与头删头插头删 单链表的尾插与尾删尾插尾删 单链表的查找单链表在pos位置后插入/删除插入删除 单链表在pos位置插入/删除插入删除 总结 引言 在…

【数据结构】单链表(超全)

目录 一、什么是链表?1.1 定义1.2 链表的分类 二、无头单向非循环链表2.1 结构2.2 如何遍历链表数据2.3 尾插2.4 创建新节点2.5 头插2.6 尾删2.7 头删2.8 单链表查找2.9 在pos位置之前插入2.10 删除pos位置数据2.11 在pos位置的后面插入2.12 删除pos位置后面的数据 …

数据结构之单链表的插入

单链表的完整的代码在这篇文章下面,链接: https://blog.csdn.net/six_teen/article/details/113253545 什么是链表? 如上图,链表和生活中的链条很相似,链表在逻辑结构上是以链条的形式连接而成的,但物理结构…

单链表的定义,插入与删除,查找,建立。

链表分为:单链表,双链表,循环链表,静态链表 一,单链表的定义 在内存空间中,各个节点在逻辑上相邻,但在物理上不相邻。 在单个的结点内部需要存放 数据域 和 指针域(存放指向下一个…

单链表的定义

前言 在前面的文章中,我们系统的介绍了线性表的顺序存储实现——顺序表。紧接着我们要介绍线性表的链式存储实现——链表。而链表中又有许多的链表: 单链表双链表循环链表静态链表 这一篇文章中,我们先来介绍单链表。 单链表的定义 什么…

(c语言)详解单链表

1:什么是单链表。 我们知道顺序表底层原理其实就是一块可以自由控制大小的数组,顺序表可以实现在任何地方进行插入一个数据,如果顺序表的缺点在于如果要在起始位置插入一个数据就要把后面的每一个数据都往后挪,这样会大量消耗我们…

双向链表中插入元素的几种方式

dnode的结构如下:由前驱prior指针、后继next指针以及数据data,现需要在A、B节点中间插入C节点,给出了A的地址,以及C的地址。 1、利用将链表拆分然后插入方式进行: 先将节点C完全插入到B的前面,再将A指向C&…

单链表的使用方法.数据结构(三)[上]

前言 提示:文本为数据解构(三)单链表: 本文具体讲解单链表的具体使用方法 提示:以下是本篇文 系列文章目录 第一章 数据解构(一) 第二章 顺序表的具体使用方法.数据解构(二) 文章目录 前言 系列文章目录 文章目录 一、单链表视图 二、…

Linux设置ssh免密登录

目录 1.在/root目录下输入命令 2.进入.ssh目录 3.将公钥id_rsa.pub写入到一个认证文件夹中 4.开启远程免密登录配置 5.免密远程登录本机 1.在/root目录下输入命令 [rootlocalhost ~]# ssh-keygen -t rsa -P "" Generating public/private rsa key pair. Enter …

Linux SSH 免密登录

Linux SSH 免密登录 本篇我们来 看看 Linux 的免密登录的原理 以及实际操作一番 概述 什么是 Linux SSH 免密登录,我觉得大家应该都 多少听过 或者操作过,那你真的理解整个免密登录的过程吗? Linux SSH 免密登录 就是 可以不输入密码 就可以…

SSH登录和SSH免密登录

在了解ssh的时候产生了概念混淆,发现ssh登录和ssh免密登录是两码事。 可以从目的和过程对比这两个概念: 1.目的 1.1 SSH登录 简单来说就是:建立客户端和服务器之间安全的远程连接,登录远程服务器,以访问文件系统 。…

VSCode——SSH免密登录

文章目录 本地PC端(一般为Windows)1. 检查自己是否已经生成公钥2. 配置VScode的SSH config 远程服务器端1. 服务器新建授权文件2. 赋权限3. 重启远程服务器的ssh服务 最全步骤:【设置ssh免密不起作用?彻底搞懂密钥】vscode在remot…

SSH免密登录功能配置

文章目录 一、SSH免密登录功能配置(1)master虚拟机免密登录master虚拟机(2)将公钥拷贝到所创建的虚拟机上 一、SSH免密登录功能配置 ssh密钥登录比密码登录安全,主要是因为他使用了非对称加密,登录过程中需…

CentOS开启SSH免密登录

CentOS开启SSH免密登录 要实现SSH免密登录,首先需要准备一组公钥和私钥。将公钥放到服务器上,将私钥放到客户机上。当客户机连接服务器时,服务器会根据自身的公钥校验客户机的私钥,如果校验通过则允许连接。 一、创建密钥 在客…

Ubuntu开启SSH免密登录

Ubuntu开启SSH免密登录 要实现SSH免密登录,首先需要准备一组公钥和私钥。将公钥放到服务器上,将私钥放到客户机上。当客户机连接服务器时,服务器会根据自身的公钥校验客户机的私钥,如果校验通过则允许连接。 一、创建密钥 在客…

git SSH免密登录

git系列文章目录 第八章 git SSH免密登录的使用 文章目录 git系列文章目录前言一、生成密钥二、使用步骤1.使用VSCODE打开.pub文件复制其中的内容2.打开github或者gitee进入设置选项设置密钥3.使用密钥 总结 前言 虽然Windows系统提供了凭据功能,但是介绍ssh提交&a…

配置SSH免密登录

配置SSH免密登录 1. 在各个虚拟机(master、s1、s2)家目录执行ssh-keygen -b 1024 -t rsa,输入2次回车,输入y/yes再继续回车 ssh-keygen -b 1024 -t rsa 2. 进入到.ssh目录中 ls -all #查看所有文件和文件夹 cd .ssh 查看目录 ls…

SSH免密登录原理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 SSH免密登录原理 前言一、配置ssh二、无密钥配置1、免密登录原理2、生成公钥和私钥3、将公钥拷贝到要免密登录的目标机器上 三、.ssh文件夹下(~/.ssh)…

ssh免密登录

两台设备,第一台设备作为客户端,第二台设备作为服务端,在第一台使用一个用户免密登录第二台设备。 在第一台设备输入命令: ssh-keygen -t rsa -b 2048 输入命令执行后遇到选项可以选择默认,敲Enter继续执行便可 然后把…

VSCode SSH 免密登录

前提 VSCode 已经安装 Remote - SSH 插件,并且可以通过密码登录远程主机 步骤 假设 VSCode 运行在 Windows,SSH 远程登录 Linux 1、在 Windows 端生成公钥/私钥对 例如在 git bash 中运行 ssh-keygen,然后一路回车,直到出现下面…