单向链表(常规和带哨兵)

1.定义

在计算机科学中,链表是数据元素的线性集合,每个元素都指向下一个元素,元素存储上并不连续

2.分类

链表中还有一种特殊的节点称为哨兵结点,也叫哑元结点、首元结点,它不存储数据,通常用作头尾,用来化简边界判断,如下图所示

3.性能

(1)随机访问

根据index查找,时间复杂度O(n)

(2)插入或删除

起始位置:O(1)

结束位置:如果已至tail尾结点是O(1),不知道尾结点是O(n)

中间位置:根据index查找时间+O(1)

4.单向链表操作

(1)单向链表类的实现
 public class SinglyLinkedList{//整体private Node head;//头指针private class Node {//节点类int value;//值Node next;//下一个节点指针public Node(int value,Node next){this.value = value;this.next = next;}}}
(2)头部插入结点
     public void addFirst(int value){
//       //1.链表为空
//       head = new Node(value,null);//2.链表非空head = new Node(value,head);}
(3)链表遍历
     public void loop(){Node p = head;while (p != null){System.out.println(p.value);p = p.next;}}

(4)尾部插入结点
     private Node findLast(){//寻找最后一个结点if (head == null){//空链表return null;}Node p = head;while (p.next != null){p = p.next;}return p;}public void addList(int value){Node last = findLast();if (last == null){head = new Node(value,head);return;}last.next = new Node(value,null);}
(5)根据索引获取结点值
     public void test(){//寻找索引int i = 0;for (Node p = head;p != null;p = p.next,i++){System.out.println(p.value + "索引是:" + i);}}private Node findNode(int index){//查找结点int i = 0;for (Node p = head;p != null;p = p.next,i++){if (i == index){return p;}}return null;  //没找到}//单独写,方便其他方法调用public int get(int index){Node node = findNode(index);if (node == null){throw new IllegalArgumentException(String.format("index [%d] 不合法%n",index));}return node.value;}
(6)向索引位置插入
     public void insert(int index,int value){if (index == 0){addFirst(value);//向第一位插入return;}Node prev = findNode(index-1);//找到上一个节点if (prev == null){//找不到throw new IllegalArgumentException(String.format("index [%d] 不合法%n",index));}prev.next = new Node(value,prev.next);}
(7)删除头部结点
     public void removeFirst(){if (head == null){throw new IllegalArgumentException(String.format("index [0] 不合法%n"));}head = head.next;}
(8)根据索引删除结点
     public void remove(int index){if (index == 0){ //要删除的是头结点removeFirst();return;}Node prev = findNode(index-1);//上一个结点if (prev == null){  //链表最多只有索引3,要删除5号则找不到索引4throw new IllegalArgumentException(String.format("index [%d] 不合法%n",index));}Node removed = prev.next; //被删除的结点if (removed == null){  //链表最多只有索引3,要删除4号throw new IllegalArgumentException(String.format("index [%d] 不合法%n",index));}prev.next = removed.next;}

5.带哨兵的单向链表

(1)单向链表类的实现
 public class SinglyLinkedList{//整体private Node head = new Node(666,null); //哨兵,value可以随意制定private class Node {//节点类int value;//值Node next;//下一个节点指针public Node(int value,Node next){this.value = value;this.next = next;}}}
(2)链表遍历
     public void loop(){Node p = head.next;while (p != null){System.out.println(p.value);p = p.next;}}
(3)尾部插入结点
​
private Node findLast(){//寻找最后一个结点Node p = head; //若是空链表,则最后一个是哨兵while (p.next != null){p = p.next;}return p;}public void addList(int value){Node last = findLast();//若为空,则直接插入哨兵后面last.next = new Node(value,null);}
 (4)查找结点对象
     private Node findNode(int index){//查找结点int i = -1;for (Node p = head;p != null;p = p.next,i++){if (i == index){return p;}}return null;  //没找到}
 (5)向索引位置插入
     public void insert(int index,int value){//若index为0,在哨兵后插入Node prev = findNode(index-1);//找到上一个节点if (prev == null){//找不到throw new IllegalArgumentException(String.format("index [%d] 不合法%n",index));}prev.next = new Node(value,prev.next);}
 (6)根据索引删除结点
     public void remove(int index){Node prev = findNode(index-1);//上一个结点if (prev == null){  //链表最多只有索引3,要删除5号则找不到索引4throw new IllegalArgumentException(String.format("index [%d] 不合法%n",index));}Node removed = prev.next; //被删除的结点if (removed == null){  //链表最多只有索引3,要删除4号throw new IllegalArgumentException(String.format("index [%d] 不合法%n",index));}prev.next = removed.next;}

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

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

相关文章

艾体宝干货 | 如何分析关键网络性能指标?持续接收样品试用申请!

网络性能是企业顺利运营的重要基础,而Allegro流量分析仪作为一款强大的网络性能分析工具,为企业提供了深入了解网络运行状况的途径。在本文中,我们将探讨如何利用Allegro 流量分析仪分析关键网络性能指标,以优化网络性能、提高安全…

视频监控国标GB28181平台EasyGBS如何更换默认的SQLite数据库?

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富,部署灵活,既能作为业务平台使用,也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务,支持内网、公网的安防视…

Apache2之Ubuntu-XXE漏洞渗透

一、配置靶场 第一步:打开kali,作为攻击机,打开是黑屏不要蒙圈,是正常的 第二步:配置局域网主机 探测局域网内的所有主机-- 1、查看虚拟机的网络配置 2、查看到我的子网地址为192.168.189.0 第三步:使用…

文心智能体零代码开发实践,创建一个智能体:从理论到实践AI技术落地

文心智能体引领零代码智能体开发新风尚,诚邀您一同探索这前沿科技的魅力!以下为实践创建一个叫”从理论到实践AI技术落地“智能体的步骤。 首先登录官网:文心智能体平台AgentBuilder | 想象即现实 登录后点击:创建智能体 输入“…

C语言例题(图形打印,逆序输出,交换数组,平均值)

一.X形图形 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜线和正斜线的长度。针对每行输入&#xff0c;输出用“*”组成的X形图案。 代码展示 #include <stdio.h> int main() {int i0;int j…

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…

LCM接口通讯说明

LCM&#xff08;Liquid Crystal Module&#xff0c;液晶模块&#xff09;接口通讯说明涉及多种接口类型和通讯方式&#xff0c;这些接口和通讯方式的选择取决于具体的应用场景和需求。 最常见的LCD模块接口协议是&#xff1a; 1.并行接口 2.串行接口 3.串行或并行配置到微处…

基于欧氏距离的点云聚类(python)

1、背景介绍 欧式聚类是一种基于欧氏距离度量的聚类算法。它是点云处理中的一个重要步骤&#xff0c;它可以帮助我们从无序的点云数据中提取有意义的信息。一般来说&#xff0c;对点云进行欧式聚类处理&#xff0c;可以帮助后续数据处理&#xff0c;如物体检测与识别、三维重建…

<Rust><iced>基于rust使用iced构建GUI实例:一个CRC16校验码生成工具

前言 本专栏是Rust实例应用。 环境配置 平台:windows 软件:vscode 语言:rust 库:iced、iced_aw 概述 本文是专栏第五篇实例,是一个CRC16校验码转换程序。 本篇内容: 1、CRC16校验码生成 代码介绍 本文的crc16校验码生成工具,主要设计两个方面,一个是crc16 modbus…

【动态规划】力扣.213. 打家劫舍 II

你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味着第一个房屋和最后一个房屋是紧挨着的。同时&#xff0c;相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一…

基于YOLOv8的高压输电线路异物检测系统

基于YOLOv8的高压输电线路异物检测系统 (价格88) 包含 【“鸟窝”&#xff0c;“风筝”&#xff0c;“气球”&#xff0c;“垃圾”】 4个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数…

文件解析漏洞--IIS--Vulhub

文件解析漏洞 一、IIS解析漏洞 用windowserver2003安装IIS测试 1.1 IIS6.X 方法一&#xff1a;目录解析 在网站下建立文件夹的名字为.asp/.asa的文件夹&#xff0c;其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。 1.txt文件里是asp文件的语法查看当前时间 方…

黑马头条Day11- 实时计算热点文章、KafkaStream

一、今日内容 1. 定时计算与实时计算 2. 今日内容 KafkaStream 什么是流式计算KafkaStream概述KafkaStream入门案例SpringBoot集成KafkaStream 实时计算 用户行为发送消息KafkaStream聚合处理消息更新文章行为数量替换热点文章数据 二、实时流式计算 1. 概念 一般流式计…

【Win10】记一次蓝屏修复

最近电脑蓝屏了好多次&#xff0c;错误代码为&#xff1a;IRQL_NOT_LESS_OR_EQUAL 直接搜这个错误代码不太好找原因&#xff0c;于是按照这篇文章[1]来打开错误日志文件。 需要先在windows的应用商店中下载WinDbg 然后&#xff0c;打开目录 C:\Windows\Minidump &#xff0c;…

“论云原生架构及其应用”写作框架软考高级论文系统架构设计师论文

论文真题 近年来&#xff0c;随着数字化转型不断深入&#xff0c;科技创新与业务发展不断融合&#xff0c;各行各业正在从大工业时代的固化范式进化成面向创新型组织与灵活型业务的崭新模式。在这一背景下&#xff0c;以容器和微服务架构为代表的云原生技术作为云计算服务的新…

CANoe在使用时碰到的一些很少见的Bug

CANoe作为一款成熟且稳定的总线仿真与测试工具&#xff0c;深受汽车工程师们的喜爱。CANoe虽然稳定&#xff0c;但作为一个软件来说&#xff0c;在使用中总会出现一些或大或小的Bug。最近全球范围内的大规模蓝屏事件&#xff0c;是由某个安全软件引起的。而很多CANoe使用者最近…

linux常使用的命令

关机命令 shutdown halt poweroff reboot grep 选项 参数 -l 显示所有包含关键字的文件名 -n 在匹配之前加上行号 -c 只显示匹配的行数 -v 显示不匹配的行 管道符 “|” 左边的输出作为右边的输入 例如&#xff1a;我们找个文件包含abc 但是不含有def的文件 grep …

《如鸢》开通官号,女性向游戏爆款预定

今天&#xff0c;备受瞩目的沉浸式剧情卡牌手游《如鸢》正式开通了官方社媒账号并发布了玩家信。 《如鸢》由灵犀互娱倾力打造&#xff0c;游戏不仅拥有跌宕起伏的权谋剧情&#xff0c;更采用Live2D技术&#xff0c;为玩家带来沉浸式的游戏体验&#xff0c;吸引了众多玩家关注。…

西门子s7第三方(S7netplus)读写操作

和西门子PLC通讯需要使用S7netplus​​这个包&#xff0c;可以在NuGet​​上搜索下载&#xff0c;下载后引入命令空间using S7.Net;​​ 创建PLC对象进行连接使用Write Read进行读写操作即可不需要在发请求帧 //创建Plc对象Plc plc; //西门子设备是s7-1200//参数1 CPu类型//参…

AIGC大模型产品经理高频面试大揭秘‼️

近期有十几个学生在面试大模型产品经理&#xff08;薪资还可以&#xff0c;详情见下图&#xff09;&#xff0c;根据他们面试&#xff08;包括1-4面&#xff09;中出现高频大于3次的问题汇总如下&#xff0c;一共32道题目&#xff08;有答案&#xff09;。 29.讲讲T5和Bart的区…