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

链表(一):移除链表元素、设计链表等力扣经典链表题目

203.移除链表元素

相关题目链接:

力扣 - 移除链表元素

题目重现

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

思路

链表的删除操作如上图所示,我们需要先找到要删除的节点,但是要注意,在操作某一节点时,我们必须要知道它的前一个节点。

也就是说,我们进行遍历,当目前遍历到的节点的下一节点不为空且等于要删除的值时,开始进行删除操作。在删除操作中,我们也要注意其顺序。

代码

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeElements(ListNode head, int val) {ListNode head1=new ListNode(0);head1.next=head;ListNode temp = head1;while(temp.next!=null){if(temp.next.val==val){temp.next=temp.next.next;}else{temp=temp.next;}}return head1.next;}
}

707.设计链表

相关题目链接:

力扣 - 设计链表

题目重现

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。

在链表类中实现这些功能:

  • get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。

  • addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。

  • addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。

  • addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。

  • deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。

思路

这道题目分为5个小函数,所以我们针对这五个部分分别进行讲解。

get(index),对于获取第index个节点的值很容易遍历嘛~

addAtHead(val),在链表的第一个元素前添加一个值为val的节点,和后面addAtIndex(index,val)类似所以,我们先写addAtIndex(index,val)

在第index个节点之前添加节点:

那么,在第index个节点前添加节点的重要任务就是找到第index个节点的前一个节点(这样才能操作第index个节点)。使用的方法依旧是遍历。

  • 在第 index 个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。

  • 如果 index 等于链表的长度,则说明是新插入的节点为链表的尾结点

  • 如果 index 大于链表的长度,则返回空

至于删除某个节点如上一题的图中所示。

代码

class ListNode {int val;ListNode next;ListNode(){}ListNode(int val) {this.val=val;}
}class MyLinkedList {int size;ListNode head;public MyLinkedList() {size = 0;head = new ListNode(0);}public int get(int index) {if (index < 0 || index >= size) {return -1;}ListNode currentNode = head;for (int i = 0; i <= index; i++) {currentNode = currentNode.next;}return currentNode.val;}public void addAtHead(int val) {addAtIndex(0, val);}public void addAtTail(int val) {addAtIndex(size, val);}public void addAtIndex(int index, int val) {if (index > size) {return;}if (index < 0) {index = 0;}size++;ListNode pred = head;for (int i = 0; i < index; i++) {pred = pred.next;}ListNode toAdd = new ListNode(val);toAdd.next = pred.next;pred.next = toAdd;}public void deleteAtIndex(int index) {if (index < 0 || index >= size) {return;}size--;if (index == 0) {head = head.next;return;}ListNode pred = head;for (int i = 0; i < index ; i++) {pred = pred.next;}pred.next = pred.next.next;}
}

206.反转链表

相关题目链接:

力扣 - 反转链表

题目重现

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

思路

具体思路如图所示。要注意修改指向前,要有修改节点的前一个节点存在。

代码

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {ListNode curr=head;ListNode prev=null;while(curr!=null){ListNode next=curr.next;curr.next=prev;prev=curr;curr=next;}return prev;}
}

24. 两两交换链表中的节点

相关题目链接:

两两交换链表中的节点

题目重现

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

思路

本题思路如图所示。

代码

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode swapPairs(ListNode head) {ListNode pHead=new ListNode(-1);pHead.next=head;ListNode cur=pHead;while(cur.next!=null&&cur.next.next!=null){ListNode temp=cur.next;ListNode temp1=cur.next.next.next;cur.next=cur.next.next;cur.next.next=temp;temp.next=temp1;cur=cur.next.next;}return pHead.next;}
}

相关文章:

链表(一):移除链表元素、设计链表等力扣经典链表题目

203.移除链表元素相关题目链接&#xff1a;力扣 - 移除链表元素题目重现给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。思路链表的删除操作如上图所示&#xff0c;我们需要先找到要删除的…...

计算机网络 第4章 作业1

一、选择题 1. 由网络层负责差错控制与流量控制,使分组按序被递交的传输方式是_________&#xff08;C&#xff09; A&#xff0e;电路交换 B&#xff0e;报文交换 C&#xff0e;基于虚电路的分组交换 D&#xff0e;基于数据报的分组交换 2. TCP/IP 参考…...

Redis-Java代码使用示例

在我之前的项目中&#xff0c;使用Redis是我们团队自己封装了一个Redis操作类&#xff0c;但是这只是在Spring提供的RedisTemplate上做了一层封装而已&#xff0c;当时使用不是很熟练&#xff0c;都是一边在网上查资料&#xff0c;一边使用&#xff1b;这篇文章会介绍两种使用方…...

acwing3485最大异或和(trie树,贪心)

给定一个非负整数数列 a&#xff0c;初始长度为 N。 请在所有长度不超过 M 的连续子数组中&#xff0c;找出子数组异或和的最大值。 子数组的异或和即为子数组中所有元素按位异或得到的结果。 注意&#xff1a;子数组可以为空。 输入格式 第一行包含两个整数 N,M。 第二行…...

EasyRecovery16免费的电脑的数据恢复工具

常见的数据恢复有两种方式&#xff0c;第一种方式是找别人恢复&#xff0c;按照市场价来说&#xff0c;数据恢复的价格每次在100-500之间&#xff0c;但这种方式容易使自己设备上的隐私资料泄露出去&#xff0c;不安全。 另一种方式则是自己学会数据恢复的方法&#xff0c;有问…...

银行数字化转型导师坚鹏:平安银行数字化转型—橙E网战略研究

平安银行对公业务数字化转型案例—橙E网战略研究课程背景&#xff1a; 很多银行存在以下问题&#xff1a;不清楚银行对公业务数字化转型能否成功&#xff1f;不知道其它银行对公业务数字化转型的实际做法&#xff1f; 课程特色&#xff1a;用实战案例解读平安银行对公业务…...

tun驱动之open

tun驱动对应的设备文件是&#xff1a;/dev/net/tun&#xff0c;其详细信息如下&#xff1a; crw-rw-rw- 1 root root 10, 200 2月 26 08:05 tun 主次设备号的定义如下&#xff1a; #define MISC_MAJOR 10 #define TUN_MINOR 200 由于tun驱动属于misc设备驱动&#xff0c;因此用…...

计算机网络体系结构

计算机网络体系结构是指计算机网络中各个层次和功能组成的结构体系&#xff0c;它定义了计算机网络中各层次之间的协议和接口&#xff0c;以实现不同类型、不同规模、不同性能的计算机之间的互联和通信&#xff0c;同时提供各种网络服务和应用。计算机网络体系结构通常被分为多…...

基础夯实,字节内部总结240道算法LeetCode刷题笔记,直呼太全

1、什么是算法算法(algorithm&#xff0c;[ˈlɡərɪəm]&#xff0c;计算程序)&#xff1a;就是定义良好的计算过程&#xff0c;他取一个或一组的值为输入&#xff0c;并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤&#xff0c;用来将输入数据转化成输出结…...

Three.js使用WebWorker进行八叉树碰撞检测

经过一番探索后还是采用了整个碰撞检测都交给worker来做 原因 如果是小的模型还是不需要这么做的 js线程足够处理构建时的开销 步骤 将需要被检测的物体集合转换成可以背worker接收的结构化数据发送给worker worker将结构化的数据转换成有效的Three元素集合并对其构建八叉树fr…...

【教程】Notion笔记多平台设置中文显示

这个笔记软件界面挺好看&#xff0c;惊艳到了。 目录 网页版 桌面端 Windows版 Mac端 安卓端 网页版 直接安装这个插件即可&#xff0c;Chrome/Edge适用&#xff1a;Notion中文版 桌面端 都要去这个github下载语言包&#xff0c;用于替换文件&#xff1a;https://github.c…...

[牛客Hot101]链表篇

文章目录1.翻转链表2.链表内指定区间翻转3. 链表中的节点每k个一组翻转4. 合并两个排序的链表5. 合并k个排序的链表6. 判断链表是否有环7. 链表中倒数第k个节点8. 删除链表中的倒数第k和节点9. 两个链表的第一个公共节点10.链表的入环节点11. 链表相加&#xff08;二&#xff0…...

Vue3 核心模块源码解析(上)

Vue3相比大家也都有所了解&#xff0c;即使暂时没有使用上&#xff0c;但肯定也学习过&#xff01;Vue3是使用TS进行重写&#xff0c;采用了MonoRepo的管理方式进行管理&#xff0c;本篇文章我们一起来看看 Vue3的使用&#xff0c;与Vue2有什么区别&#xff0c;以及我们该如何优…...

【C进阶】指针的高级话题

文章目录:star:1. 字符指针:star:2. 指针数组2.1 指针数组的定义2.2 指针数组的使用:star:3. 数组指针3.1 数组的地址3.2 数组指针的使用:star:4. 数组参数和指针参数:star:5. 函数指针5.1 函数名和函数的地址5.2 练习:star:6. 函数指针数组6.1 转移表:star:7. 指向函数指针数组…...

无源晶振匹配电容—计算方法

以前有写过一篇文章“晶振”简单介绍了晶振的一些简单参数&#xff0c;今天我们来说下无源晶振的匹配电容计算方法&#xff1a; 如上图&#xff0c;是常见的的无源晶振常见接法&#xff0c;而今天来说到就是这种常见电路的电容计算方法&#xff0c;有两种&#xff1a; A&#…...

【测试】自动化测试03(JUnit)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录JUnit一&#xff09; 注解1. Test2. BeforeEach3. BeforeAll4. AfterEach5. AfterAll二&#xff09; 断言&#xff08;Assertions类&#xff09;三&#xff09;用例的执行顺序四&#xff09;参数化五&#xff09;测试…...

《计算机视觉和图像处理简介 - 中英双语版》:神经网络中的激活函数 ReLU vs Sigmoid

文章大纲 Neural Network Module and Training Function创建数据集Define Neural Network, Criterion function, Optimizer and Train the ModelTest Sigmoid and ReluAnalyze Results参考文献与学习路径在本文中,我们使用含有两个隐藏层的神经网络基于MNIST数据集测试Sigmoid…...

(三十七)大白话SQL标准中对事务的4个隔离级别,都是如何规定的呢?

之前我们给大家讲了数据库中多个事务并发时可能产生的几种问题&#xff0c;包括了脏写、脏读、不可重复读、幻读&#xff0c;几种问题 那么针对这些多事务并发的问题&#xff0c;实际上SQL标准中就规定了事务的几种隔离级别&#xff0c;用来解决这些问题。 注意一下&#xff…...

全国计算机等级考试三级网络技术考试大纲(2022年版)

全国计算机等级考试三级网络技术考试大纲&#xff08;2022年版&#xff09;基本要求 &#xff11;&#xff0e; 了解大型网络系统规划、管理方法&#xff1b; &#xff12;&#xff0e; 具备中小型网络系统规划、设计的基本能力&#xff1b; &#xff13;&#xff0e; 掌握中小…...

服务器部署—若依【vue】如何部署到nginx里面?nginx刷新页面404怎么办?【完美解决建议收藏】

服务器部署项目我们大家都会遇到&#xff0c;但是有些铁子会遇到很多的问题&#xff0c;比如前端部署nginx如何操作&#xff1f; 前端有单纯的静态页面、还有前后端分离的项目&#xff1b;这里博主直接分享最牛最到位的前后端分离项目的前端部署到nginx上面&#xff0c;以若依项…...

GIS小白必看!Global Mapper处理正射影像的5个高频问题解答(含奥维地图导入避坑指南)

GIS新手实战指南&#xff1a;Global Mapper正射影像处理全解析 第一次打开Global Mapper时&#xff0c;那些密密麻麻的工具栏和复杂的参数设置确实让人望而生畏。去年我刚接触GIS时&#xff0c;处理无人机航拍的正射影像就踩了不少坑——坐标系选错导致影像偏移几百米、导出分幅…...

APK Editor Studio:从入门到精通的完整Android应用编辑指南

APK Editor Studio&#xff1a;从入门到精通的完整Android应用编辑指南 【免费下载链接】apk-editor-studio Powerful yet easy to use APK editor for PC and Mac. 项目地址: https://gitcode.com/gh_mirrors/ap/apk-editor-studio 在Android应用开发和逆向工程领域&am…...

[FFXIVChnTextPatch]:国际服中文补丁解决方案——从入门到精通

[FFXIVChnTextPatch]&#xff1a;国际服中文补丁解决方案——从入门到精通 【免费下载链接】FFXIVChnTextPatch 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIVChnTextPatch 一、问题引入&#xff1a;当语言成为游戏体验的隐形壁垒 你是否曾在探索艾欧泽亚大陆时…...

前端未来趋势:别再用老掉牙的技术了

前端未来趋势&#xff1a;别再用老掉牙的技术了 各位前端同行&#xff0c;咱们今天聊聊前端未来趋势。别告诉我你还在使用老掉牙的技术&#xff0c;那感觉就像在使用诺基亚手机。 为什么你需要关注前端未来趋势 最近看到一个项目&#xff0c;还在使用 jQuery&#xff0c;我差点…...

OpenClaw故障排查大全:百川2-13B量化模型接入常见报错解决

OpenClaw故障排查大全&#xff1a;百川2-13B量化模型接入常见报错解决 1. 当网关拒绝启动时 上周深夜调试OpenClaw时&#xff0c;我遇到了最棘手的网关启动失败问题。控制台反复报错Error: listen EADDRINUSE: address already in use :::18789&#xff0c;但用lsof -i :1878…...

GNSS说第(八)讲---自适应动态导航定位(八)---抗差估计在复杂环境下的应用实践

1. 抗差估计&#xff1a;GNSS定位的"防弹衣" 想象一下你在高楼林立的城市峡谷中打开手机导航&#xff0c;信号时断时续&#xff0c;定位图标像喝醉酒一样到处乱飘——这就是典型的多路径干扰场景。传统最小二乘法就像用普通尺子测量扭曲的橡皮筋&#xff0c;单个异常…...

嵌入式开发中的静态代码分析工具与应用

嵌入式代码静态分析工具深度解析1. 静态代码分析技术概述1.1 传统编译器的局限性标准C语言编译器通常只能检测代码中的语法错误和部分潜在缺陷&#xff0c;对于程序架构设计和逻辑层面的问题往往无能为力。这种局限性在嵌入式开发中尤为明显&#xff0c;因为嵌入式系统对代码质…...

Midjourney 图像到图像转换:真实人物与动漫的一致性与多样场景选择

Midjourney 拥有强大的图像到图像转换能力。本文将手把手教你如何在我们的 AceDataCloud 网站 上将照片切换到任何动漫场景&#xff0c;同时保持角色的一致性。 通过以下步骤&#xff0c;我们可以轻松实现角色一致性。 接下来&#xff0c;我们看一下效果&#xff0c;原始图像如…...

JPEXS Free Flash Decompiler与Web3.0存储:去中心化SWF文件管理的终极指南

JPEXS Free Flash Decompiler与Web3.0存储&#xff1a;去中心化SWF文件管理的终极指南 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler JPEXS Free Flash Decompiler是一款功能强大的开源…...

图床项目(二) 接口设计

接口设计 1 . muduo 网络模型 该模型相较于普通的reactor模型复杂一点&#xff0c;其中包括mainReactor 和 多个 subReactor &#xff0c;其中每一个 subReactor对应一个线程。 其中 mainReactor 负责处理新连接 &#xff0c; 并将连接均匀分配给 subReactor &#xff0c;后续…...