java之单链表的基本概念及创建

1.链表的概念:

链表是一种 物理存储结构上非连续 存储结构,数据元素的 逻辑顺序 是通过链表中的 引用链接 次序实现的 。
组成结构: 由一系列节点组成,每个节点包含数据域和指向下一个节点的指针。
优点:  动态大小,易于插入和删除操作。
 缺点:   但访问元素时需要从头节点逐个遍历。

2.链表的结构:

(1)单向列表或双向列表:

(2).带头或者不带头节点:

(3). 循环或者非循环:

但今天我们重点讲解无头单向非循环链表:结构简单.

链表的实现:

1.无头单向非循环列表的实现:

1.1确定实现的功能并这些功能放入接口中:

我们实现的单链表功能有:头插(addFirst),尾插(addLast),展示(display),链表大小(size),    是否包含所需的值(contain), 指定位置插入元素(index), 移除指定元素(remove),将其放入接口中即可

public interface IList {//头插法public void addFirst(int data);//尾插法public void addLast(int data);//遍历展示public void disPlay();//得到链表的大小?public int size();//判断链表中是否包含所需的值public boolean contains(int key);//在指定位置插入元素public void index(int index,int data);//移除指定元素public void remove(int key);//清空与key相同的链表public void removeAllKey(int key);//qingli'public void clear();}

1.2基本结构的实现:

(1).定义链表结构:数据域和指向下一节点的指针,创建接受收数据域的构造方法,同时也要包含头指针(head),具体代码实现如下:

static class ListNode{public int val;public ListNode next;public ListNode(int val){this.val = val;}}public ListNode head;

(2)创建链表:

创建5个节点并随机赋值,通过指针将5个节点连接起来。具体代码如下:

 public void creatList(){ListNode node1 = new ListNode(12);ListNode node2 = new ListNode(25);ListNode node3 = new ListNode(26);ListNode node4 = new ListNode(30);ListNode node5 = new ListNode(33);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node5;//this.node = node;}

1.3基本功能的实现:

(1) display()

创建一个指针cur指向头节点,    while循环cur不为空时,打印对应的值,同时指针指向下一个节点具体代码如下:

 public void disPlay(){ListNode cur = head;while(cur!=null){System.out.println(cur.val+" ");cur = cur.next;}System.out.println();}

(2) size(链表大小)

创建一个cur指针,指向链表头节点head,同时创建一个整形len,while每次循环cur指针不为空,

则len自增1,同时指针指向下一个节点,循环结束返回len,具体代码如下:

public int size() {int len = 0;ListNode cur = head;while(cur!=null){len++;cur = cur.next;}return len;}

(3) contain:

遍历头节点cur,若cur的值==key,则返回true,同时指向下一个节点,否则false,

具体代码如下:

  public boolean contains(int key){ListNode cur = head;  //创建头节点while(cur!=null)    //循环遍历cur的值是否等于key{if(cur.val == key){return true;}cur = cur.next;   //地址自增}return false;}

(4)addFirst(头插)

新创一个节点,将新创节点的指针域传给头节点,同时将node转变为头节点:

具体代码如下:

 public void  addFirst(int data){ListNode node  = new ListNode(data);node.next = head;head = node;  //新创节点变为头节点}

(4)尾插:

创建一个node节点,将data放入:

判断head头节点是否为空,为空,则为空链表,这时插入的节点既是头节点也是尾节点,将node转为头节点。

head不为空,通过while循环cur.next !=null(判断是否到达尾节点),没到达,cur节点继续往下走,到达了,把cur.next节点指向node,具体代码如下:

 public void addLast(int data){ListNode Node =  new ListNode(data);if(head == null){head = Node;return;}ListNode cur = head;while(cur.next != null){cur = cur.next;}cur.next = Node;}

(5) 指定位置插入元素:

通过size方法获取链表长度并赋值给变量len,若索引index<0或index>len,此时位置不合法,需返回。

当index == 0,头插即可

当index == len,尾插即可

其余情况,举了个例子,如下,你想在2位置插入新值,就要获取1位置的节点,即index-1位置上的节点,创建一个cur节点来接收头节点,此时可以通过index-1!=0作为while循环条件,每次将cur自增1,将index自减1,让cur达到index-1的位置

这里将新节点的 next 指向当前节点 cur 的下一个节点,然后将 curnext 更新为新节点,从而实现插入

以上就是今天要分享的知识点,喜欢的老铁来个三联把!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

无人机集群路径规划:​北方苍鹰优化算法(Northern Goshawk Optimization,NGO)​求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…

51单片机——LED灯篇

一、LED与单片机P2管脚相连 二、点亮一个LED灯 #include <STC89C5xRC.H> void main() { P2 0xFE; //1111 1110 } P2有8个管脚&#xff0c;对应8个二进制位。 LED灯右侧接电源是正极&#xff08;1&#xff09;&#xff0c;左侧给负极&#xff08;0&#xff09;即可…

Web_php_include 攻防世界

<?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) { 以是否检测到php://为判断执行循环$pagestr_replace("php://", "", $page);//传入空值&#xff0c;替换 } include($page); ?&g…

第四范式发布AIGS Builder企业级软件重构助手,以生成式AI重构企业软件

产品上新 Product Release 今天&#xff0c;第四范式发布企业级软件重构助手——AIGS Builder&#xff0c;可快速重构软件交互体验。传统的企业软件开发&#xff0c;每次迭代通常要以月计。基于第四范式AIGS Builder大模型&#xff0c;用生成式Agent替代复杂的界面&#xff0c;…

AI绘制调整虚线教程

1、打开ai的软件&#xff0c;执行菜单栏中的文件—新建&#xff0c;新建一个大小任意的画板&#xff0c;画板大小根据自己的需要来设置。 2、选择工具箱中的直线段工具&#xff0c;将填充设置为无&#xff0c;描边设置为黑色&#xff0c;描边大小稍微设置大一点&#xff0c;画一…

模拟实现STL的stack、queue、deque等的介绍

文章目录 前言一、模拟实现stack二、模拟实现queue三、 deque总结 前言 模拟实现STL的stack、queue、deque等的介绍 一、模拟实现stack STL的stack是通过增加一个容器的模板参数&#xff0c;不直接实现栈&#xff0c;让容器存储数据&#xff0c;并调用容器的接口实现栈 name…

环形链表问题——力扣141,142

环形链表问题——力扣141&#xff0c;142 141.判断链表是否带环142.给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 NULL 141.判断链表是否带环 这道题不能用比较链表中的值来判断是否带环&#xff0c;因为链表中不同节点的值可以相同…

Java免税购物商城:Spring Boot技术实现

第二章 系统开发关键技术 2.1 JAVA技术 Java主要采用CORBA技术和安全模型&#xff0c;可以在互联网应用的数据保护。它还提供了对EJB&#xff08;Enterrise JavaBeans&#xff09;的全面支持&#xff0c;java servlet AI&#xff0c;JS&#xff08;java server ages&#xff09…

matlab绘制二维云图,划分区域,并显示每个区域的均值

绘制成图如下&#xff1a; 代码如下&#xff1a; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%创建绘图的数据 ax0;bx1; ay0;by1; nx100; %数据的x轴点数 ny100; %数据的y轴点数 hx(bx-ax)/(nx-1); hy(by-ay)/(ny-1); Xax:hx:bx; Yay:hy:by; da…

有趣的Python-turtle

1 介绍 turtle 是 Python 中用来绘图的标准库&#xff08;Python解释器在安装后import直接使用&#xff09;&#xff0c;它简单且有趣&#xff0c;作为 Python初学者 都可以将它作为第一个学习对象&#xff0c;培养程序学习的兴趣&#xff0c;建立编程带来的成就感&#xff0c…

网络安全-webshell绕过,hash碰撞,webshell绕过原理

目录 一、题目 1.1 1.2 1.3 1.4 1.5 二、绕过动态检测引擎的一次尝试 三、一个比赛中的webshell 四、webshell绕过的原理以及哈希碰撞 五、JSP解释流程导致的绕过&#xff08;QT比赛&#xff09; 5.1环境 5.2例子 一、题目 这里我们通过几道题目来给大家讲解 1.…

Springboot3 + MyBatis-Plus + MySql + Uniapp 实现商品规格选择sku(附带自设计数据库,最新保姆级教程)

Springboot3 MyBatis-Plus MySql Uniapp 实现商品规格选择sku&#xff08;附带自设计数据库&#xff0c;最新保姆级教程&#xff09; 1、效果展示2、数据库设计2.1 商品表2.2 商品价格和规格中间表2.3 商品规格表 3、后端代码3.1 model3.2 vo3.3 mapper、server、serverImp3…

前端-javaScript:jquery补充

jquery绑定事件的方式 1.直接使用事件函数 &("div").click(function(){alert(1)}) 2.用统一的on函数绑定事件 on(事件类型&#xff0c;事件函数) $("div").on("click",function(){alert(2)}) 事件类型以参数的类型传递 --->可以同时绑…

go webapi上传文件 部属到linux

go厉害的地方&#xff0c;linux服务器上无需安装任务依赖就可以运行&#xff0c;大赞&#xff01; 一、编译 #在Goland中cmd中执行 go env -w GOARCHamd64 go env -w GOOSlinux go build main.go # 切换回来 否则无法运行 go env -w GOOSwindows go run main.go 拷贝到linux服…

C++——关联式容器(4):set和map

在接触了诸如二叉搜索树、AVL树、红黑树的树形结构之后&#xff0c;我们对树的结构有了大致的了解&#xff0c;现在引入真正的关联式容器。 首先&#xff0c;先明确了关联式容器的概念。我们之前所接触到的如vector、list等容器&#xff0c;我们知道他们实际上都是线性的数据结…

使用pe工具制作ubuntu备份系统和还原系统

使用pe工具制作ubuntu备份系统和还原系统 备份系统还原系统修复磁盘教程修复引导教程为什么使用pe工具 1,因为我个人觉得这个工具实现起来比systemback软件操作起来报错少些,而且装的快,其他系统同理 实验准备 1,一个电脑,一个pe启动U盘 备份系统 插入U盘,开机进入pe系…

[JavaEE] UDP协议

目录 再谈端口号 一、端口号的划分 二、UDP协议 三、UDP的特点 再谈端口号 一、端口号的划分 0-1023&#xff1a;知名端口号&#xff0c;端口号固定&#xff0c;其中包括HTTP&#xff0c;FTP&#xff0c;SSH等广为使用的应用层协议。 1024-65535&#xff1a;操作系统动态分…

数据结构|二叉搜索树

&#x1f36c; mooridy-CSDN博客 &#x1f36c;数据结构专栏&#xff08;更新中&#xff09; 目录 1. ⼆叉搜索树的概念 2. ⼆叉搜索树的性能分析 3.⼆叉搜索树key和key/value key搜索场景 key/value搜索场景 4. 二叉搜索树的代码实现 4.1 ⼆叉搜索树的插⼊ 4.2 ⼆叉搜索…

java----LinkedHashMap

.由键决定:有序、不重复、无索引 .这里的有序指的是保证存储和去除的元素顺序一致 原理:底层数据结构依然是哈希表,只是每个键值对元素又额外多了一个双链表的机制记录存储的顺序。 内容来自:集合进阶-09-LinkedHashMap_哔哩哔哩_bilibili

ChatGPT 在国内使用的方法

AI如今很强大&#xff0c;聊聊天、写论文、搞翻译、写代码、写文案、审合同等等&#xff0c;ChatGPT 真是无所不能~ 作为一款出色的大语言模型&#xff0c;ChatGPT 实现了人类般的对话交流&#xff0c;最主要是能根据上下文进行互动。 接下来&#xff0c;我将介绍 ChatGPT 在国…