《算法通关村第一关——链表青铜挑战笔记》
《算法通关村第一关——链表青铜挑战笔记》
Java如何构造出链表
概念
如何构造出链表,首先必须了解什么是链表!
单向链表就像一个铁链一样,元素之间相互链接,包含多个节点,每个节点有一个指向后继元素的next指针。表中最后一个元素的next指向null。

链表的核心是一个节点只能有一个后继节点,但不代表链表指向本节点的只有一个。
Java与C++不同没有了指针,只有引用,不用进行内存的回收,会使得代码的书写更加简单。
Java如何编写链表
先放代码
package AlgorithmFirst;public class LinkedNode {private int data;private LinkedNode next;public LinkedNode(int data){this.data = data;}/*** 获取数据* @return 数据值*/public int getData(){return this.data;}/*** 设置数据的值* @param data 数据*/public void setData(int data){this.data = data;}/*** 获取下一个节点* @return 当前节点的下一个几点*/public LinkedNode getNext(){return this.next;}/*** 设置下一个节点的值* @param next 下一个节点*/public void setNext(LinkedNode next){this.next = next;}/*** 获取链表长度* @param head 头节点* @return*/public static int getListLength(LinkedNode head){int length = 0 ;LinkedNode node = head;while(node != null){length ++ ;node = node.next;}return length;}/*** 缺省位置,直接在最后插入* @param head 头节点* @param insertNode 插入节点* @return 头节点*/public static LinkedNode insertNode(LinkedNode head,LinkedNode insertNode){int size = getListLength(head);// return insertNode(head,insertNode,size+1); 修改一下,以便insertNode后面的元素能够全部插入进来。int count = 1;LinkedNode temp = head;while(temp != null){if(count == size ){temp.next = insertNode;}temp = temp.next;count++;}return head;}/*** 指定位置插入* @param head 头节点* @param nodeInsert 插入节点* @param position 插入位置,从1开始* @return 返回头节点*/public static LinkedNode insertNode(LinkedNode head , LinkedNode nodeInsert, int position){if (head == null ){// 如果head == null 表示当前链表为空,可以直接返回当前节点,或者报异常,这里直接把它当作头节点。return nodeInsert;}// 已经存在的元素的个数int size = getListLength(head);if(position > size + 1 || position < 1 ){System.out.println("位置参数越界");return head;}// 表头插入if(position == 1 ){nodeInsert.next = head;// 这里可以直接 return nodeInserthead = nodeInsert;return head;}LinkedNode pNode = head;int count = 1;// 这里position 被上面的size限制住了,不用考虑pNode = nullwhile(count < position -1){pNode = pNode.next;count ++ ;}nodeInsert.next = pNode.next;pNode.next = nodeInsert;return head;}/*** 缺省参数的删除最后一个节点* @param head 链表头节点* @return 返回新链表头节点*/public static LinkedNode deleteNode(LinkedNode head){int size = getListLength(head);return deleteNode(head,size);}/*** 根据位置删除节点* @param head 链表头节点* @param position 位置从1开始,最大链表大小 超出不删除,返回原头节点。* @return 新链表头节点*/public static LinkedNode deleteNode(LinkedNode head , int position){if(head == null) {// 链表为空,无法删除return null ;}int size = getListLength(head);if(position > size || position < 1 ){System.out.println("输入参数有误" );return head;}if( position == 1){return head.next;}else{LinkedNode cur = head;int count = 1;while(count<position-1){cur = cur.next;count ++;}LinkedNode curNode = cur.next;cur.next = curNode.next;//上面两行可以简化成 : cur.next = cur.next.next}return head;}public static void printLinkedList(LinkedNode head){int count = 0;while(head != null){System.out.println("第 "+ ++count +" 个:"+ head.data);head = head.next;}}public static void main(String[] args) {LinkedNode head = new LinkedNode(0);for(int i = 0 ; i<10 ; i++){head = LinkedNode.insertNode(head,new LinkedNode(i+1));}System.out.println("origin:");printLinkedList(head);head = deleteNode(head,3);System.out.println("delete the third ");printLinkedList(head);head = deleteNode(head);System.out.println("delete the last one");printLinkedList(head);head = insertNode(head,new LinkedNode(11));System.out.println("insert one from last");printLinkedList(head);head = insertNode(head,new LinkedNode(22222),1);System.out.println("insert to first");printLinkedList(head);}}
添加节点需要注意的点
链表无节点
如果开始链表无节点,那么就把插入的节点作为头节点返回
插入到头节点
注意一下插入进行的操作步骤,首先把插入节点的 next 等于 head , 然后再让head 等于 插入节点,然后返回。
插入到结尾
插入到结尾需要从head 遍历到结尾,然后用最后一个节点的next指向插入节点即可。
插入到中间
插入到中间,需要注意先通过遍历,找到要插入位置的前一个,然后插入节点的next等于前一个的next,而前一个的next指向插入节点。一定要注意顺序!
删除节点需要注意的
链表为空
直接返回
删除头节点
直接返回头节点的next 节点就好了。
删除中间节点、尾节点
首先要找到中间节点的前一个节点,让前一个节点的next指向自己的next的next就可以了。
近期在自学 Java 做项目,加入了一个编程学习圈子,里面有编程学习路线和原创的项目教程,感觉非常不错。还可以 1 对 1 和大厂嘉宾交流答疑,也希望能对大家有帮助,扫 ⬇️ 二维码即可加入。

也可以点击链接:我正在「编程导航」和朋友们讨论有趣的话题,你⼀起来吧?
相关文章:
《算法通关村第一关——链表青铜挑战笔记》
《算法通关村第一关——链表青铜挑战笔记》 Java如何构造出链表 概念 如何构造出链表,首先必须了解什么是链表! 单向链表就像一个铁链一样,元素之间相互链接,包含多个节点,每个节点有一个指向后继元素的next指针。…...
【深度学习实验】循环神经网络(四):基于 LSTM 的语言模型训练
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. RNN与梯度裁剪 2. LSTM模型 3. 训练函数 a. train_epoch b. train 4. 文本预测 5. GPU判断函数 6. 训练与测试 7. 代码整合 经验是智慧之父,记忆…...
IOS课程笔记[1-3] 第一个IOS应用
安装开发环境 安装Xcode软件 历史版本查找 https://developer.apple.com/download/all/?qdebug 创建Object-C项目 启动过程 步骤 1.加载Main中定义的storyBoard 2.加载Main控制器 3.加载控制器下的View组件显示 获取控件的两种方式 定义属性连线:property (…...
Flink的基于两阶段提交协议的事务数据汇实现
背景 在flink中可以通过使用事务性数据汇实现精准一次的保证,本文基于Kakfa的事务处理来看一下在Flink 内部如何实现基于两阶段提交协议的事务性数据汇. flink kafka事务性数据汇的实现 1。首先在开始进行快照的时候也就是收到checkpoint通知的时候,在…...
树模型(三)决策树
决策树是什么?决策树(decision tree)是一种基本的分类与回归方法。 长方形代表判断模块 (decision block),椭圆形成代表终止模块(terminating block),表示已经得出结论,可以终止运行。从判断模块引出的左右箭头称作为分支(branch)…...
vueday01——使用属性绑定+ref属性定位获取id
1.属性绑定(Attribute 绑定) 第一种写法 <div v-bind:id"refValue"> content </div> 第二种写法(省略掉v-bind) <div :id"refValue"> content </div> 2.代码展示 <template…...
LeetCode 260. 只出现一次的数字 III:异或
【LetMeFly】260.只出现一次的数字 III 力扣题目链接:https://leetcode.cn/problems/single-number-iii/ 给你一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。你可以按 任意顺序 返…...
使用PyTorch解决多分类问题:构建、训练和评估深度学习模型
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...
基于nodejs+vue网课学习平台
各功能简要描述如下: 1个人信息管理:包括对学生用户、老师和管理员的信息进行录入、修改,以及老师信息的审核等 2在库课程查询:用于学生用户查询相关课程的功能 3在库老师查询:用于学生用户查询相关老师教学的所有课程的功能。 4在库学校查询:用于学生用户查询相关学…...
读书笔记:Effective C++ 2.0 版,条款13(初始化顺序==声明顺序)、条款14(基类有虚析构)
条款13: 初始化列表中成员列出的顺序和它们在类中声明的顺序相同 类成员是按照它们在类里被声明的顺序进行初始化的,和它们在成员初始化列表中列出的顺序没一点关系。 根本原因可能是考虑到内存的分布,按照定义顺序进行排列。 另外,初始化列表…...
flutter开发实战-下拉刷新与上拉加载更多实现
flutter开发实战-下拉刷新与上拉加载更多实现 在开发中经常遇到列表需要下拉刷新与上拉加载更多,这里使用EasyRefresh,版本是3.3.21 一、什么是EasyRefresh EasyRefresh可以在Flutter应用程序上轻松实现下拉刷新和上拉加载。它几乎支持所有Flutter Sc…...
旧手机热点机改造成服务器方案
如果你也跟我一样有这种想法, 那真的太酷了!!! ok,前提是得有root,不然体验大打折扣 目录 目录 1.做一个能爬墙能走百度直连的热点机(做热点机用) 2.做emby视频服务器 3.做文件服务, 存取文件 4.装青龙面板,跑一些定时任务 5.做远程摄像头监控 6.做web服务器 7.内网穿…...
网工实验笔记:策略路由PBR的应用场景
一、概述 PBR(Policy-Based Routing,策略路由):PBR使得网络设备不仅能够基于报文的目的IP地址进行数据转发,更能基于其他元素进行数据转发,例如源IP地址、源MAC地址、目的MAC地址、源端口号、目的端口号、…...
webrtc快速入门——使用 WebRTC 拍摄静止的照片
文章目录 使用 getUserMedia() 拍摄静态照片HTML 标记JavaScript 代码初始化startup() 函数获取元素引用获取流媒体 监听视频开始播放处理按钮上的点击包装 startup() 方法 清理照片框从流中捕获帧 例子代码HTML代码CSS代码JavaScript代码 过滤器使用特定设备 使用 getUserMedi…...
预约按摩app软件开发定制足浴SPA上们服务小程序
同城按摩小程序是一种基于地理位置服务的小程序,它可以帮助用户快速找到附近的按摩师,并提供在线预约、评价、支付等功能。用户可以通过手机或者其他移动设备访问同城按摩小程序,实现足不出户就能预约到专业的按摩服务。 一、同城按摩小程序的…...
jenkins出错与恢复
如果你的jenkins出现了如下图所示问题(比如不能下载插件,无法保存任务等),这个时候就需要重新安装了。 一、卸载干净jenknis 要彻底卸载 Jenkins,您可以按照以下步骤进行操作: 1、停止 Jenkins 服务&…...
ssh免密登录的原理RSA非对称加密的理解
RSA非对称加密,是采用公钥加密私钥解密的原则。 举个例子SSH的免密登录 SSH免密登录是通过使用公钥加密技术实现的。以下是SSH免密登录的原理: 1. 生成密钥对:首先,在客户端上生成一对密钥,包括一个私钥和一个公钥。私…...
【监督学习】基于合取子句进化算法(CCEA)和析取范式进化算法(DNFEA)解决分类问题(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
力扣每日一题41:缺失的第一个正数
题目描述: 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3示例 2: 输…...
OpenCV与mediapipe实践
1. 安装前准备 开发环境:vscode venv 设置vscode, 建立项目,如: t1/src, 用vscode打开,新建终端Terminal,这时可能会有错误产生,解决办法: 运行命令:Set-ExecutionPolicy -ExecutionPolicy …...
PUMA560轨迹规划踩坑记:DH参数选错,你的仿真结果还准吗?
PUMA560轨迹规划实战:从DH参数陷阱到精准运动控制 第一次在MATLAB中看到PUMA560机械臂的末端执行器画出诡异的"8"字轨迹时,我盯着屏幕足足愣了三分钟。按照教科书上的标准DH参数编写的代码,理论上应该生成完美的直线运动࿰…...
终极指南:如何用Save Image as Type一键转换网页图片格式
终极指南:如何用Save Image as Type一键转换网页图片格式 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh_mirrors/sa/Sav…...
终极Windows 11优化指南:一键清理系统臃肿,让电脑速度翻倍
终极Windows 11优化指南:一键清理系统臃肿,让电脑速度翻倍 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其…...
vLLM-v0.17.1详细步骤:vLLM + Triton Ensemble实现多模型协同推理
vLLM-v0.17.1详细步骤:vLLM Triton Ensemble实现多模型协同推理 1. vLLM框架简介 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,以其出色的吞吐量和易用性著称。这个项目最初由加州大学伯克利分校的天空计算实验室开发,现在已…...
Qwen3-0.6B-FP8多语言落地:支持粤语、闽南语、藏语等方言指令理解实测
Qwen3-0.6B-FP8多语言落地:支持粤语、闽南语、藏语等方言指令理解实测 1. 引言:当AI能听懂你的家乡话 想象一下,你正在用粤语和AI助手聊天,让它帮你写一份工作报告;或者用闽南语问它今天的天气,它不仅能听…...
2025年开源工具jable-download:视频下载工具高效解决方案
2025年开源工具jable-download:视频下载工具高效解决方案 【免费下载链接】jable-download 方便下载jable的小工具 项目地址: https://gitcode.com/gh_mirrors/ja/jable-download 在数字化内容消费日益增长的今天,视频资源的获取与保存成为许多用…...
从朱诺到威尼斯:一个可持续旅游模型如何‘开箱即用’解决你的美赛问题二
从朱诺到威尼斯:可持续旅游模型的跨场景迁移实战指南 模型迁移的核心挑战与解决框架 当我们将一个城市的可持续旅游模型迁移到另一个城市时,表面上看似乎只需要更换数据输入,但实际操作中会遇到三个维度的挑战: 1. 资源禀赋差异 自…...
掌握 AgentScope 与 Spring AI Alibaba:大模型多智能体实践指南(收藏版)
本文深入探讨了 AgentScope 与 Spring AI Alibaba 在大模型应用中的多智能体实践。从单智能体优先原则出发,详细解析了 Pipeline、Routing、Skills、Subagents、Supervisor、Handoffs 及 Custom Workflow 等多种多智能体模式,并提供了实用的架构选型指南…...
AtlasOS系统性能优化指南:从诊断到维护的全流程解决方案
AtlasOS系统性能优化指南:从诊断到维护的全流程解决方案 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atl…...
AlertDialog高斯模糊进阶指南:Android12新特性与兼容方案对比
AlertDialog高斯模糊进阶指南:Android12新特性与兼容方案对比 在移动应用设计中,视觉层次的营造往往决定了用户体验的优劣。当用户与AlertDialog交互时,背景的高斯模糊效果能够有效聚焦注意力,同时保持界面连贯性。Android 12引入…...
