当前位置: 首页 > news >正文

算法与数据结构之链表

链表的定义,相信大家都知道,这里就不赘述了只是链表分单向链表和双向链表,废话不多说,直接上代码

链表节点的定义:

public class Node {int val;Node next;Node pre;public Node(int val, Node next, Node pre) {this.val = val;this.next = next;this.pre = pre;}public Node(int val, Node next) {this.val = val;this.next = next;}public Node(int val) {this.val = val;}public Node() {}
}

打印链表的两种方式:

    //从前往后打印链表private void print(Node head) {while (head != null) {System.err.print(head.val);head = head.next;}System.err.println();}//从后往前打印链表private void print1(Node head) {while (head != null) {System.err.print(head.val);head = head.pre;}System.err.println();}

翻转单向链表:核心思路是先断开连接,再将next指向前继节点,为了避免断开之后,找不到前继节点,需要用一个临时变量记录前继节点,在下一轮循环的时候把当前节点的next指向上一轮循环时的pre

    //翻转单链表private Node reverList(Node head) {Node pre = null;Node next = null;while (head != null) {//下一次进来的时候连上前一个节点,先记录下前一个节点,不能先断开了后面的节点,不然就找不到了next = head.next;head.next = pre;pre = head;head = next;}return pre;}@Testpublic void reverList() {Node one = new Node(2, new Node(3, new Node(4)));print(one);print(reverList(one));}

翻转双向链表:思路同单向链表一样,只是多了一些判断

   //翻转双向链表private Node reverseDoubleList(Node head) {Node next = null;Node pre = null;while (head != null) {next = head.next;head.next = pre;head.pre = next;pre = head;head = next;}return pre;}@Testpublic void reverseDoubleList() {Node one = new Node(1);Node two = new Node(2);Node three = new Node(3);one.next = two;one.pre = null;two.next = three;two.pre = one;three.pre = two;three.next = null;print(one);print1(three);Node node = reverseDoubleList(one);print(node);print1(one);}

从链表中删除指定的数据:

 //从单链表中删除指定的数据private Node removeList(Node head, int target) {Node pre = null;Node next = null;while (head != null) {//第一轮循环找到新的头结点,因为要删除的数据可能是第一个也可能是最后一个next = head.next;if (target != head.val) {break;}head = next;}next = pre = head;//while (next != null) {if (target == next.val) {next = next.next;pre.next = next;//相等的时候提前把pre和下一个连起来,这样下一个如果相等,只需要移动pre即可continue;}pre = next;//不相等的时候pre记录前一个节点,等到下一轮如果相等时候就可以把pre和next连上了next = next.next;}return head;}@Testpublic void removeList() {Node one = new Node(2, new Node(5, new Node(2, new Node(3, new Node(2)))));print(one);print(removeList(one, 2));}

相关文章:

算法与数据结构之链表

链表的定义,相信大家都知道,这里就不赘述了只是链表分单向链表和双向链表,废话不多说,直接上代码 链表节点的定义: public class Node {int val;Node next;Node pre;public Node(int val, Node next, Node pre) {thi…...

深入剖析React Hooks中的 useCallback

前言 自 React 16.8 版本引入 Hooks 以来,useCallback 成为了前端开发者们越来越青睐的一个功能。useCallback 可以有效优化组件性能,尤其在处理函数式组件中的状态更新时。本文将详细介绍 useCallback 的用法及其注意事项。 1. useCallback 简介 use…...

微服务中配置文件(YAML文件)和项目依赖(POM文件)的区别与联系

实际上涉及到了微服务架构中的两个重要概念:服务间通信和项目依赖管理。在微服务架构中,一个项目可以通过两种方式与另一个项目建立依赖关系:通过配置文件(如YAML文件)和通过项目依赖(如POM文件&#xff09…...

Java快速排序算法、三路快排(Java算法和数据结构总结笔记)[7/20]

一、什么是快速排序算法 快速排序的基本思想是选择一个基准元素(通常选择最后一个元素)将数组分割为两部分,一部分小于基准元素,一部分大于基准元素。 然后递归地对两部分进行排序,直到整个数组有序。这个过程通过 par…...

【React】05.JSX语法使用上的细节

水水水水水...

LeetCode 1759. 统计同质子字符串的数目【字符串】1490

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

FPGA UDP RGMII 千兆以太网(2)IDDR

1 xilinx原语 在 7 系列 FPGA 中实现 RGMII 接口需要借助 5 种原语,分别是:IDDR、ODDR、IDELAYE2、ODELAYE2(A7 中没有)、IDELAYCTRL。其中,IDDR和ODDR分别是输入和输出的双边沿寄存器,位于IOB中。IDELAYE2和ODELAYE2,分别用于控制 IO 口输入和输出延时。同时,IDELAYE2 …...

chrome安装vue devtools

不能访问应用商店 如果可以访问应用商店可以往下看 插件源代码 选择shell-chrome,这是官方的插件源码 下载源代码打包 参考教程 点击扩展按钮->管理扩展程序->打开开发者模式->把crx文件拖拽进去即可 可以访问chrome应用商店 插件地址 官方文档地址 选…...

【Docker】iptables命令的使用

iptables是一个非常强大的Linux防火墙工具,你可以使用它来控制网络流量的访问和转发。 前面已经学习了iptables的基本原理,四表五链的基本概念,也已经安装好了iptables,下面我们主要学习iptables命令的基本使用。 可以使用iptable…...

Flex bison 学习好代码

计算机的重要课程编译原理很难学吧, 但是要会用flex &bison的话,容易理解一些。 有些好的项目可以帮助我们,比如 https://github.com/jgarzik/sqlfun 可以帮我们,下载 下来。 在cygwin 下面或者linux 运行: …...

学习Nginx配置

1.下载地址 官网地址:NGINX - 免费试用、软件下载、产品定价 (nginx-cn.net) 我这边选择NGINX 开源版 nginx: download 2.nginx的基本配置 配置文件语法 配置文件组成:注释行,指令块配置项和一系列指令配置项组成。 单个指令组成&#x…...

怎么批量获取文件名,并保存到excel?

怎么批量获取文件名?什么叫批量获取文件名,其实也非常好理解,就是面对大量文件是可以一次性的获取所有文件名称,这项技术的应用也是非常常见的,为什么这么说呢?现在很多的文档管理人员或者公司的文员&#…...

数据结构: unordered_map与unordered_set

目录 1.框架 2.结构 unordered_map unordered_set 3.对HashTable的修改 更改模板参数 4.增加迭代器 a.结构 b.运算符重载 c.HashTable封装迭代器 d.unordered_map与unordered_set的迭代器 1.框架 1.复用HashTable ~~> 增加模板参数KeyOfT 来获取 Key值 unorder…...

WebDAV之π-Disk派盘 + PassStore

大家常用的qq,手机微信,新浪微博等。假如各个网址都设成同样的帐号和登陆密码,一旦某一帐户泄漏了,别的平台上的账户密码都有被撞库攻击的风险。在不一样的站点设定不一样的高韧性登陆密码才算是最安全可靠的确保,殊不知这般繁多的帐户密码是难以记得的。因而,有着一款安…...

OpenCV实现手势虚拟拖拽

前言: Hello大家好,我是Dream。 今天来学习一下如何使用OpenCV实现手势虚拟拖拽,欢迎大家一起前来探讨学习~ 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验,主要步骤如下: 导入OpenCV库。通过OpenCV读取摄…...

深圳市宝安区委常委、宣传部部长周学良一行莅临联诚发考察调研

11月9日,深圳市宝安区组织开展主题教育“大走访、大座谈、大起底”行动和调查研究、“基层调研服务日”活动。当日上午,区委常委、宣传部部长周学良率调研组莅临联诚发LCF总部考察调研。区委宣传部副部长孙箫韵,区文化广电旅游体育局党组成员…...

Presentation Prompter 5.4.2(mac屏幕提词器)

Presentation Prompter是一款演讲辅助屏幕提词器软件,旨在帮助演讲者在公共演讲、主持活动或录制视频时更加流畅地进行演讲。以下是Presentation Prompter的一些特色功能: 提供滚动或分页显示:可以将演讲稿以滚动或分页的形式显示在屏幕上&a…...

9 网关的作用

1、总结: 1.如果离开本局域网,就需要经过网关,网关是路由器的一个网口。 2.路由器是一个三层设备,里面有如何寻找下一跳的规则 3.经过路由器之后 MAC 头要变,如果 IP 不变,相当于不换护照的欧洲旅游&#…...

计算机网络实验

计算机网络实验 使用软件PT7.0按照上面的拓扑结构建立网络,进行合理配置,使得所有计算机之间能够互相通信。并且修改各交换机的系统名称为:学号_编号,如你的学号为123,交换机Switch0的编号为0,则系统名称为…...

九凌网络分享外贸快车实现迅速出口的目标

随着全球化进程的不断加速,外贸行业也越来越繁荣。但如何在这个竞争激烈的市场中迅速出口,成为了很多外贸企业家们面临的难题。为此,很多企业开始寻求新的帮助,其中一种办法就是通过专业的外贸快车来提高自己的出口速度。九凌网络…...

如何高效修复损坏视频:专业级开源工具实用指南

如何高效修复损坏视频:专业级开源工具实用指南 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 当珍贵的视频文件突然无法播放时,那种焦虑感是…...

多模态生成模型的方言鲁棒性挑战与优化方案

1. 多模态生成模型的方言鲁棒性挑战在当今AI技术快速发展的背景下,多模态生成模型(如Stable Diffusion、DALLE等)已经能够根据文本提示生成高质量的图像和视频内容。然而,这些模型在处理非标准英语方言输入时表现出的性能差异却鲜…...

手把手教你用PyQtGraph+PyQt5/PySide6打造一个实验室级数据监控仪表盘

用PyQtGraphPyQt5构建工业级数据监控系统的全栈指南 实验室和工业环境中,数据可视化监控系统正从专业软件向Python技术栈迁移。PyQtGraph作为性能标杆,配合PyQt5/PySide6的界面框架,能构建出媲美LabVIEW的定制化解决方案。本文将完整呈现从架…...

抖音视频下载终极指南:免费批量下载高清无水印视频的完整方案

抖音视频下载终极指南:免费批量下载高清无水印视频的完整方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

零基础玩转LumiPixel:手把手教你搭建专属AI人像生成画布

零基础玩转LumiPixel:手把手教你搭建专属AI人像生成画布 1. 认识LumiPixel:Canvas Quest LumiPixel: Canvas Quest是一款融合了AI技术与复古像素美学的视觉创作平台。它基于强大的Z-Image扩散模型,专为生成高质量人像而设计。与常见的AI绘画…...

当车间老师傅遇上AI调度员:深度强化学习在真实产线中的试错与成长日记

当车间老师傅遇上AI调度员:深度强化学习在真实产线中的试错与成长日记 1. 传统调度遇上智能革命 走进任何一家离散制造工厂的车间,你总能看到几位眉头紧锁的老师傅站在排程板前,手中的记号笔在密密麻麻的工序卡间来回游走。他们的大脑就像一台…...

Qwen3-32B镜像配置优化:提升响应速度与使用体验

Qwen3-32B镜像配置优化:提升响应速度与使用体验 1. 为什么需要优化Qwen3-32B镜像配置 Qwen3-32B作为一款320亿参数的大型语言模型,在推理能力、多语言支持和复杂任务处理方面表现出色。然而,在实际部署和使用过程中,许多用户会遇…...

终极Unity游戏翻译指南:5分钟用XUnity.AutoTranslator打破语言障碍

终极Unity游戏翻译指南:5分钟用XUnity.AutoTranslator打破语言障碍 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的日语RPG或欧美大作而苦恼吗?XUnity.AutoTranslat…...

如何快速掌握DownKyi:新手必备的B站视频下载完整指南

如何快速掌握DownKyi:新手必备的B站视频下载完整指南 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&#x…...

Altium Designer 22 快捷键大全:从AD9老用户视角整理的15个效率翻倍技巧

Altium Designer 22 效率革命:15个让老用户相见恨晚的快捷键秘籍 从AD9切换到AD22就像从手动挡升级到自动驾驶——如果你还坚持用老方法操作新工具,不仅浪费了90%的生产力提升空间,还可能被年轻同事用快捷键秀一脸。作为经历过这个转型期的工…...