看一下链表结构

序、慢慢来才是最快的方法。

背景

链表(Linked List)
链表是一种常见的基础数据结构,是一种线性表。与顺序表不同的是,链表中的每个节点不是顺序存储的,而是通过节点的指针域指向到下一个节点。

1.链表的优缺点

2.链表的类型

单链表、双链表、循环链表、静态链表。

1.单链表

  • element:用来存放元素
  • next:用来指向下一个节点元素
  • 通过每个结点的指针指向下一个结点从而链接起来的结构,最后一个节点的next指向null。

代码示例:

//单向链表
class SingleLinkedList{//先初始化一个头节点, 头节点不要动, 不存放具体的数据private Node head = new Node("");//添加节点public void add(Node node){Node temp = head;while (true){if(temp.next == null){break;}temp = temp.next;}temp.next = node;}// 插入新节点到链表的头部  public void insertAtHead(String data) {  Node newNode = new Node(data);  if (head != null) {  //新链表的next直接指向head即可。newNode.next = head;  }  head = newNode;  }  //删除节点public void del(String element) throws Exception {Node temp = head;boolean flag = false; // 标志是否找到待删除节点的while (true){if(temp.next == null){//最后一个节点break;}if(temp.next.element == element){flag = true;break;}temp = temp.next;}if(flag){temp.next = temp.next.next;} else {throw new Exception("没有找到要删除的节点");}}//定义节点class Node{public String element;//用来存放元素public Node next; //指向下一个节点public Node(String element) {super();this.element = element;}}
}

单链表反转

反转链表问题在面试中出现频率 非常非常高,相信有过几次面试经验的同学都会同意这个观点。

解法1:递归
  //递归解法private Node reversetList(Node node) {if (node == null || node.next == null) {return head;}Node nodePre= reversetList(node);node.next.next = node.next;node.next = null;return nodePre;}
解法2:迭代
   //单链表反转 迭代private Node reversetList1(Node node) {//如果当前链表为null,或者只有一个节点,则无需反转if (node == null && node.next == null) {return node;}//定义一个辅助的指针(变量),帮助我们遍历原来的链表Node cur = node.next;Node next = null;// 指向当前节点[cur]的下一个节点Node reverseNode = new Node("");while (cur != null) {next = cur.next;//先暂时保存当前节点的下一个节点,因为后面需要使用cur.next = reverseNode.next;///将cur 的下一个节点指向新的链表的最前端reverseNode = cur;将cur 连接到新的链表上cur = next;//让cur 后移}return reverseNode;}

2.双链表

单向链表的好处很多,虽然单链表能 100% 解决逻辑关系为 "一对一" 数据的存储问题,但在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 "从前往后" 找,而 "从后往前" 找并不是它的强项,因此我们就有了双向链表这个东西,双向链表顾名思义就是链表的高级版,他与单向链表有所不同的一点在于在具有尾巴结点,并且双向链表的每一个结点都会有两个指向,一个指向前面的结点,一个指向后面的结点,当然头结点的前端指向为null,后结点的后端指向为null。
 

element、pre、next 跟前面的一样。

第一个节点的pre指向最后一个节点,最后一个节点的next指向第一个节点,形成一个环。

代码示例

public ListNode head;public ListNode last;public TowWayNodeList(int num){this.head = new ListNode(num);this.last = this.head;}//头插法public void addFirst(int num){ListNode node = new ListNode(num);if(head == null){this.head = node;this.last = node;}else{node.next = this.head;this.head.prev = node;this.head = node;}}//尾插发
public void addLast(int data){ListNode node = new ListNode(data);if(head == null){this.head = node;this.last = node;}else{this.last.next = node;node.prev = this.last;this.last = node;}}

参考

数据结构与算法 #1 链表问题总结 - 掘金

leetcode 206 号算法题:反转单链表【数据结构与算法】_哔哩哔哩_bilibili

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

Java实现双向链表_双向链表java实现_跑不死的程序员的博客-CSDN博客

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

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

相关文章

有了PMP证书,还用考CSPM吗?

首先结论放前面(看个人发展要求,如果想有双证加持的话,建议可以把握这个机会去申请,因为现在处于政策前期,可以免试申请,未来的政策未知。如果目前已经从事项目管理且拥有pmp证书的话,为了以后的…

将C盘中的文件夹迁移到其他盘符

目录 1 微信文件 2 移动系统自带文件夹 3 清除软件的缓存 1 微信文件 微信文件默认存储在C盘中,放任不管可能会占用很大的空间 更改后文件会自动挪过去,在C盘中只保留较小的空间 2 移动系统自带文件夹 像文档,图片这种文件夹&#…

TOGAF(企业架构)

TOGAF 核心概念(官方原版) 什么是TOGAF? TOGAF?是一种经验证的企业架构方法和框架,被世界领先的组织用于提高业务效率。它是一个企业架构标准,确保企业架构专业人员之间的标准、方法和通信一致,以便我们…

解读提示工程(Prompt Engineering)

提示工程(Prompt Engineering),也称为上下文提示,是一种通过不更新模型的权重/参数来引导LLM行为朝着特定结果的方法。这是与AI有效交流所需结果的过程。提示工程可以用于各种任务,从回答问题到算术推理乃至各种应用领…

1808_ChibiOS基本的架构介绍

全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 简单看了一下ChibiOS的架构介绍,感觉这种OS以及组件非常适合快速构建一个应用。这里做一个简单的资料整理。。 1. 不同于其他的OS&#…

孙哥Netty视频笔记总结

视频在这儿:https://blog.csdn.net/weixin_43996338/article/details/133771464 【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】 【更多面试资料请加微信号:suns45】 https://flowus.cn/share/f6cd2cbe-627a-43…

微信小程序 js中写一个px单位转rpx单位的函数

大家写东西自然还是会比较喜欢用rpx 但是 事实证明 在js中 还是px好用 因为很多单位交互的函数还是只返回px单位的 理论上将 750 rpx 是整个屏幕的宽度 那么 我们可以这样写一个函数 pxToRpx(px) {//获取整个屏幕的宽度单位 pxlet screenWidth wx.getSystemInfoSync().scree…

Linux 回顾总结

学习前提(环境搭建):RHCSA Linux环境搭建-CSDN博客 目录 一、shell 二、文件 三、用户和组管理 四、权限 五、软件 六、网络 七、磁盘 一、shell Linux的操作界面常称为Shell,Shell是操作系统提供给用户使用的界面&#xf…

土壤水分烘干法流程

土壤水分烘干法流程 叠小盒子装土 对折 得到一个正方形,裁掉多余的。然后将正方形按如下形式折 再次对折 然后再展开,对着折痕,竖立起盒子边缘 把上面的尖角翻下来 最后将多余的长条裁出一个盒子底部大小的小方块,放入盒子…

几种常见算法模式与场景应用

在计算机科学中,算法是解决问题的步骤和策略的集合。许多问题都可以通过使用算法解决,这些算法在解决问题的过程中会展现出一些共性和模式。以下是几种常见的算法模式以及它们在场景中的应用: 分治法 (Divide and Conquer) 分治法是一种将问题…

在Vue+Ts+Vite项目中如何配置别名指向不同的目录并引用

在VueTsVite项目中如何配置别名指向不同的目录并引用 vite.config.ts配置如下:tsconfig.json中需要配置baseUrl和paths,如下所示:项目中直接引入案例: vite.config.ts配置如下: import { defineConfig, AliasOptions } from vite…

绘制X-Bar-S和X-Bar-R图,监测过程,计算CPK过程能力指数

X-Bar-S图和X-Bar-R图是统计质量控制中常用的两种控制图,用于监测过程的稳定性和一致性。它们的主要区别在于如何计算和呈现数据的变化以及所关注的问题类型。 X-Bar-S图(平均值与标准偏差图): X-Bar代表样本均值,S代表…

路由高级特性

项目拓扑与项目需求 项目需求 某企业网络使用ospf和isis作为IGP协议实现内部网络的互联互通,区域规划和IP规划如图所示,现在要求实现如下需求: LSW1和AR1使用vlan10互联,与AR2使用vlan20互联,LSW1与LSW2、3、4之间使…

spring boot RabbitMq基础教程

RabbitMq 由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不同语言的客户端。 但是,RabbitMQ官方提供的Java客户端编码相对复杂,一般…

将vue项目打包成安卓app

目标:将vue项目打包成安卓app 工具:HbuilderX 1.在HbuilderX中创建一个 5App 项目 创建好的app项目目录 2.将vue项目打包 2.1 在 vue.config.js 中添加公共路径(解决打包后的app图片不显示问题) module.exports defineConfig(…

深入了解线程:并发编程的核心要点和应用

什么是线程? 线程(Thread)是计算机科学中的一个基本概念,它是进程内的执行单元。线程是操作系统或进程内部的轻量级执行流,具有独立的程序计数器(PC)和栈,但共享相同进程的资源&…

Python高效实现网站数据挖掘

在当今互联网时代,SEO对于网站的成功至关重要。而Python爬虫作为一种强大的工具,为网站SEO带来了革命性的改变。通过利用Python爬虫,我们可以高效地实现网站数据挖掘和关键词分析,从而优化网站的SEO策略。本文将为您详细介绍如何利…

新风机缺点有哪些?

虽然新风机在提供新鲜空气和改善室内空气质量方面有很多优点,但它也存在一些缺点。下面列举几个常见的新风机缺点: 安装成本较高:新风机需要通过管道连接室内和室外,需要对房屋进行改造和安装。这可能会增加一些额外的安装成本&am…

代码随想录算法训练营第六十二、六十三天 | 单调栈 part 2 | 503.下一个更大元素II 、42. 接雨水、84.柱状图中最大的矩形

目录 503.下一个更大元素II思路代码 42. 接雨水思路一 双指针思路二 单调栈代码 84.柱状图中最大的矩形思路一 双指针思路二 单调栈代码 503.下一个更大元素II Leetcode 思路 将数组乘2来遍历即可,就是加长版的每日温度。 但是处理起来会有细节,如果…

JAVA学习第一天,java的运行方式

对未来很迷茫,不知道以后能出去干什么,好像掌握的东西很少,从今天开始学习学习java吧,让自己充实起来,记录一下。 jav…