数据结构之单链表的插入

article/2025/9/20 9:45:18

单链表的完整的代码在这篇文章下面,链接:
https://blog.csdn.net/six_teen/article/details/113253545

什么是链表?

在这里插入图片描述

如上图,链表和生活中的链条很相似,链表在逻辑结构上是以链条的形式连接而成的,但物理结构上链表的节点不是连续性存储的。

在这里插入图片描述
如图,每一个节点都分为两块区域,data区和next区,data区存储数据,next区存储下一个节点的地址。因为节点的这种特性,所以链表可以充分利用内存中零散的空间。

链表一般分为带头节点的链表和不带头节点的链表(头结点用head表示)后续演示都使用带头节点的链表(一般头结点data区为空,next区指向第一个节点):
在这里插入图片描述

先定义一个节点类:
no表示节点序号,name,nickename是节点携带的一些数据,next就是存放下一个节点的地址的区域

class HeroNode{private int no;private String name;private String nickname;private HeroNode next;//一个有参构造public HeroNode(int no, String name, String nickname) {this.no = no;this.name = name;this.nickname = nickname;}@Override//重写该类的toString,不带next属性public String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +", nickname='" + nickname + '\'' +'}';}//属性的 get set 方法省略
}

再定义一个单链表类:

class SingleLinkedList{//单链表的头节点初始化next域指向nullprivate HeroNode head = new HeroNode(0,"","");public void setHead(HeroNode head) {this.head = head;}public HeroNode getHead() {return head;}
}

链表的插入方法有以下几种:
1.头插法(对单链表反转有帮助)
2.尾插法
3.按序号插入(对两个有序单链表合并为一个有序单链表有帮助)

此处用图解的方法说明头插法,其他方法是类似的就不一一画图了(ps:实在是画图太折磨人了)

在这里插入图片描述

尾插法的关键在于,每次插入时都需要先遍历链表,找到链表最后一个节点。
用while循环遍历,也需要一个temp节点初始化和head节点或者是head.next(即第一个节点)地址相同,temp=head或者temp=head.next
while退出循环的条件是temp.next==null,具体代码如下:
该方法代码在SingleLinkedList类内部,所以可以直接引用到链表的head。

因为在java中类属性的改变需要get set方法,所以和伪代码的.next有所不同

public void add(HeroNode node){HeroNode temp = head;while(true){if(temp.getNext()==null){break;}temp = temp.getNext();}//循环结束之后,此时的temp就和链表最后一个节点的地址相同//操作temp就相当于操作最后一个节点//执行尾插法node.setNext(temp.getNext());//此时的temp.getNext()==nulltemp.setNext(node);//如果链表为空,那么temp还是指向head,照样可以插入节点
}

按序号插入也是相对较难的插入,先上代码,后面再解释:
该方法还是在单链表类的内部定义的

public void addByNo(HeroNode node){HeroNode temp = head;Boolean flag = false;//标识编号是否已经存在while (true){//while循环结束,找到插入点if (temp.getNext()==null){break;}else if (temp.getNext().getNo() > node.getNo()){break;}else if (temp.getNext().getNo() == node.getNo()){flag = true;}temp = temp.getNext();}if (flag){System.out.printf("准备插入的节点编号%d已经存在\n",node.getNo());}else {node.setNext(temp.getNext());temp.setNext(node);}}

按序号插入的核心在于,要判断当前指针temp所指向的节点的下一个节点temp.next的序号是否大于要插入节点node的序号,如果大于,就把node节点插入到temptemp.next的中间。如果不大于,temp指针就往链表后面移动一个位置,再进行下一个节点序号与要插入节点序号的判断。下面给个图解释一下:
在这里插入图片描述

以上就是单链表的三种插入方法,如有解释不当,还望大佬见谅。


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

相关文章

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

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

单链表的定义

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

(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,然后一路回车,直到出现下面…

SSH免密登录配置

免密登录命令: 1.进入.ssh目录: cd ~/.ssh 2.生成一对密钥: ssh-keygen -t rsa 3.发送公钥: ssh-copy-id 192.168.xx.xxx 4.免密登录测试: ssh 192.168.xx.xxx 目录 一、免密登录原理 二、配置ssh 1.查看 .…

SSH配置免密登录方法

转载自https://blog.csdn.net/jeikerxiao/article/details/84105529 1.客户端生成公私钥 本地客户端生成公私钥:(一路回车默认即可) ssh-keygen上面这个命令会在用户目录.ssh文件夹下创建公私钥 cd ~/.sshls下创建两个密钥: id…

Jwt登录退出

1.登录获取用户信息并写入token Overridepublic CommonResult loginV2(RcSysUserEntity byAccount) {log.info("********************");log.info("******************** account-V2:{}",byAccount.getAccount());log.info("********************&quo…