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

链表题型思路错误总结

常见题目

206. 反转链表

在这里插入图片描述

关键点:定义前置指针。
在给cur.next复制前,需要定义好next节点防止断链。

	public ListNode reverseList(ListNode head) {if (head == null || head.next == null) {return head;}ListNode pre = null;ListNode cur = head;while(cur!=null) {ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}

21. 合并两个有序链表

在这里插入图片描述
关键点:需要一个实质的头节点

class Solution {public ListNode mergeTwoLists(ListNode l1, ListNode l2) {if (l1 == null) {return l2;}if (l2 == null) {return l1;}ListNode pre = new ListNode();ListNode cur = pre;while (l1 != null && l2 != null) {if (l1.val < l2.val) {cur.next = l1;l1 = l1.next;} else {cur.next = l2;l2 = l2.next;}cur = cur.next;}while (l1 != null) {cur.next = l1;l1 = l1.next;cur = cur.next;}while (l2 != null) {cur.next = l2;l2 = l2.next;cur = cur.next;}return pre.next;}
}

109. 有序链表转换二叉搜索树

在这里插入图片描述
关键点:如何对链表进行分割。

class Solution {public TreeNode sortedListToBST(ListNode head) {if (head == null) {return null;}if (head.next == null) {return new TreeNode(head.val);}return curser(head, null);}private TreeNode curser(ListNode head, ListNode tail) {if (head == tail) {return null;}ListNode slow = head;ListNode fast = head;while(fast != tail && fast.next != tail) {slow = slow.next;fast = fast.next.next;}TreeNode root = new TreeNode(slow.val);root.left = curser(head, slow);root.right = curser(slow.next, tail);return root;}}

234. 回文链表

思路1:转换成数组,按照定义进行判断

class Solution {public boolean isPalindrome(ListNode head) {if(head == null || head.next == null){return true;}int length = 0;ListNode cur = head;while (cur != null) {length ++;cur = cur.next;}int[] array = new int[length];cur = head;for (int i = 0; i < length; i++) {array[i] = cur.val;cur = cur.next;}for (int i = 0; i < length/2; i++) {if(array[i] != array[length - i - 1]) {return false;}}return true;}
}

思路2:找到中间节点,进行反转

为什么设置:ListNode slow = head; ListNode fast = head.next; 而不是ListNode slow = head; ListNode fast = head;

  • 找到需要反转链表的前一个,为了统一
    在这里插入图片描述
    在这里插入图片描述
    1 3 5 3 1是找到了饭互赞链表的前一个,但是1 2 2 1却找到了需要反转的当前这个。
    所以需要将fast往后移动一位,如下:
    在这里插入图片描述

在这里插入图片描述

class Solution {public boolean isPalindrome(ListNode head) {if (head == null || head.next == null) {return true;}// 找到中间节点ListNode slow = head;ListNode fast = head.next;while(fast !=null && fast.next != null) {slow = slow.next;fast = fast.next.next;}// 反转后半部分ListNode second = slow.next;slow.next = null;second = reverse(second);while(second != null) {if (head.val != second.val){return false;}second = second.next;head = head.next;}return true;}private ListNode reverse(ListNode head){if(head == null ||head.next == null){return head;}ListNode pre = null;ListNode cur = head;while(cur != null){ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;} 
}

876. 链表的中间结点

思路:如上题解题思路

class Solution {public ListNode middleNode(ListNode head) {if (head == null || head.next == null) {return head;}// 找到中间节点ListNode slow = head;ListNode fast = head;while(fast !=null && fast.next != null) {slow = slow.next;fast = fast.next.next;}return slow;}
}

19. 删除链表的倒数第 N 个结点

在这里插入图片描述

  • 为什么新加一个头结点
  • 为了防止删除第一节点,例如n = 5时,不好操作,加一个头结点有些解决这类问题。添加头结点
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {if (head == null){return head;}ListNode pre = new ListNode();pre.next = head;ListNode cur = pre;ListNode fast = head;for (int i = 0; i < n; i++) {if (fast != null) {fast = fast.next;}}while(fast != null) {cur = cur.next;fast = fast.next;}cur.next = cur.next.next;return pre.next;}
}

86. 分隔链表

在这里插入图片描述

class Solution {public ListNode partition(ListNode head, int x) {if (head == null) {return head;}ListNode l1 = new ListNode();ListNode l2 = new ListNode();ListNode cur = head;ListNode small = l1;ListNode big = l2;while(cur != null) {ListNode next = cur.next;if (cur.val < x) {small.next = cur;small = small.next;} else {big.next = cur;big = big.next;}cur.next = null;cur = next;}small.next = l2.next;return l1.next;}
}

92. 反转链表 II

在这里插入图片描述

  • left需要指向移动前一个,right移动到需要反转的位置。
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {if (head == null || head.next == null) {return head;}ListNode pre = new ListNode();pre.next = head;ListNode le = pre;ListNode rt = pre;for (int i = 0; i < left - 1; i++){le = le.next;}ListNode l1 = null;if(le != null) {l1 = le.next;}for (int i = 0; i < right; i++){rt = rt.next;}ListNode l2 = null;if(rt != null) {l2 = rt.next;rt.next = null;}le.next = reverseListNode(l1);l1.next = l2;return pre.next;}private ListNode reverseListNode(ListNode head) {if (head == null || head.next == null) {return head;}ListNode pre = null;ListNode cur = head;while(cur != null) {ListNode next = cur.next;cur.next = pre;pre = cur;cur = next;}return pre;}
}

从尾到头打印链表

删除链表的节点

链表中倒数第K个节点

反转链表

合并两个排序的链表

复杂两个链表的复制

两个链表的第一个公共节点

相关文章:

链表题型思路错误总结

常见题目 206. 反转链表 关键点&#xff1a;定义前置指针。 在给cur.next复制前&#xff0c;需要定义好next节点防止断链。 public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode pre null;ListNode cur head;while(cur…...

算法学习day28

一、寻找右区间(二分法) 题意&#xff1a;题目很容易理解 但是转换为二分法有点晦涩 给你一个区间数组 intervals &#xff0c;其中 intervals[i] [starti, endi] &#xff0c;且每个 starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j &#xff0c;并满足 startj > e…...

C语言基础题:迷宫寻路(C语言版)

1.题目描述 机器猫被困在一个矩形迷宫里。 迷宫可以视为一个n x m 矩阵&#xff0c;每个位置要么是空地&#xff0c;要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。 机器猫初始时位于(1,1)的位置&#xff0c;问能否走到(n,m)位置。 2.输入格式 第一行&#xff0…...

力扣-1两数之和2两数相加-2024/8/3

1、两数之和 解法一 暴力法&#xff08;2个for循环&#xff09; class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for ii in range(len(nums)):for jj in range(ii1, len(nums)):if nums[ii]nums[jj] target:return [ii,jj]解法二 哈希表法…...

简站WordPress主题 专业的WordPress建站服务商

简站WordPress主题是一款备受推崇的WordPress主题&#xff0c;以其简洁、实用、无插件和更安全的特性脱颖而出。以下是关于简站WordPress主题的一些详细分析&#xff1a; 简站WordPress主题采用了扁平化设计风格&#xff0c;界面简洁明了&#xff0c;这使得网站看起来更加专业…...

Final Shell for Mac 虚拟机连接工具【简单易操作,轻松上手】【开发所需连接工具】

Mac分享吧 文章目录 效果一、下载软件二、安装软件三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件 链接&#xff1a;http://www.macfxb.cn 二、安装软件 三、运行测试 安装完成&#xff01;&#xff01;&#xff01;...

Oracle JDK:版本、支持与许可

文章目录 版本支持许可BCLOTNNFTCFAQ其他OpenJDK和其他的JDK实现JDK、JRE、JVMJava SE、Java EE、Java ME版本 Oracle JDK的最新版本和历史版本的官方下载地址(可查询版本发行说明等信息):https://www.oracle.com/cn/java/technologies/downloads/ 常规版本(非LTS):每隔…...

大模型学习笔记 - LLM 之RLHF人类对齐的简单总结

LLM - RLHF人类对齐的简单总结 LLM-人类对齐 1. RLHF(Reinforcement Learning from Human Feedback, RLHF),基于人类反馈的强化学习2 奖励模型训练3 强化学习训练 3.1 PPO介绍3.2 进阶的RLHF的介绍 3.2.1. 过程监督奖励模型3.2.2. 基于AI反馈的强化学习3.2.3. 非强化学习的对齐…...

【从零开始一步步学习VSOA开发】 概述

概述 概念 VSOA&#xff08;Vehicle SOA&#xff09;是翼辉为了解决任务关键型系统不能适用当前微服务通信架构问题而设计的⼀个轻量级适用于任务关键领域的微服务通信架构&#xff0c;以方便开发者构建大型分布式松耦合软件系统&#xff0c;且支持并行开发。 特点 其主要特…...

小程序背景图片无法通过 WXSS 获取

问题&#xff1a;pages/index/index.wxss 中的本地资源图片无法通过 WXSS 获取 可以使用网络图片&#xff0c;或者 base64&#xff0c;或者使用标签。 将图片转换为base64&#xff0c;地址 base64图片在线转换工具 - 站长工具 在这里把要使用的图片转换一把&#xff0c;然后将得…...

CC++内存魔术:掌控无形资源

hello,uu们,今天呢我们来详细讲解C&C的内存管理,好啦,废话不多讲,开干 1:C/C内存分布 2:C语言中动态内存管理方式:malloc/calloc/realloc/free 3:C内存管理方式 3.1:new/delete操作内置类型 3.1.1:代码1 3.1.2:代码2 3.2:new和delete操作自定义类型 3.2.1:C语言创建…...

算法--初阶

1、tips 1.1、set求交集 {1,2,3} & {2,3} & {1,2} {2} 其实就是位运算&#xff0c; 只有set可以这样使用&#xff0c; list没有这种用法 {1,2,3} | {2,3, 4} | {1,2} {1, 2, 3, 4} 并集 1.2、*与** * 序列(列表、元组)解包&#xff0c;如果是字典&#xff0c;那…...

通过Java实现插入排序(直接插入,希尔)与选择排序(直接选择,堆排)

目录 &#xff08;一&#xff09;插入排序 1.直接插入排序 &#xff08;1&#xff09;核心思想&#xff1a; &#xff08;2&#xff09;代码实现&#xff08;以从小到大排序为例&#xff09;&#xff1a; &#xff08;3&#xff09;代码分析&#xff1a; 2.希尔排序&#xff08…...

大型分布式B2B2C多用户商城7.0企业版源码分享【java语言、方便二次开发】

项目介绍 项目基于SpringBoot开发&#xff0c;运营端和商户端采用ElementVue&#xff0c;买家使用采用VueIviewnuxt服务端渲染。使用到的中间件有Redis、RabbitMQ、ElasticSearch、FastDFS、Mongodb等。主要功能包括有运营管理、商品管理、订单管理、售后管理、会员管理、财务…...

C++的结构体、联合体、枚举类型(一)

1.C++的结构体 2.C++的联合体 3.C++的枚举类型 1.C++的结构体 (1)C++中定义结构体变量,可以省略struct关键字 struct XX{…}; XX x;//定义结构体变量直接省略struct(2)C++结构体中可以直接定义函数,谓之成员函数(又叫方法)(3)在成员函数中可以直接访问该结构体的成员变…...

搭建高可用OpenStack(Queen版)集群(一)之架构环境准备

一、搭建高可用OpenStack&#xff08;Queen版&#xff09;集群之架构环境准备 一、架构设计 二、初始化基础环境 1、管理节点创建密钥对&#xff08;方便传输数据&#xff09; 所有控制节点操作 # ssh-keygen #一路回车即可 Generating public/private rsa key pair. Enter f…...

通过Stack Overflow线程栈溢出的问题实例,详解C++程序线程栈溢出的诸多细节

目录 1、问题说明 2、从Visual Studio输出窗口中找到了线索&#xff0c;发生了Stack Overflow线程栈溢出的异常 3、发生Stack Overflow线程栈溢出的原因分析 4、线程占用的栈空间大小说明 5、引发线程栈溢出的常见原因和场景总结 6、在问题函数入口处添加return语句&…...

LeetCode刷题笔记 | 3 | 无重复字符的最长子串 | 双指针 | 滑动窗口 | 2025兴业银行秋招笔试题 | 哈希集合

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 这是一道银行的面试题&#xff0c;就是简单&#xff1f;&#xff01; LeetCode链接&#xff1a;3. 无重复字符的最长子串 1.题目描述 给定一个字符串 s &#xff0c…...

验证cuda和pytorch都按照成功了

要验证您的PyTorch是否能够调用CUDA&#xff0c;您可以执行以下步骤&#xff1a; 1. **检查CUDA是否可用**&#xff1a; 在Python中运行以下代码来检查CUDA是否可用&#xff1a; python import torch print(torch.cuda.is_available()) 如果输出为 True&…...

iOS开发如何自己捕获Crash

为了在iOS中捕获和处理未捕获的Objective-C异常和系统信号引起的崩溃&#xff0c;可以使用NSSetUncaughtExceptionHandler和标准的Unix信号处理机制来实现。这能帮助你记录绝大部分的崩溃信息。以下是详细的实现步骤和代码示例&#xff1a; 一、系统崩溃处理 通过NSSetUncaug…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

门静脉高压——表现

一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构&#xff1a;由肠系膜上静脉和脾静脉汇合构成&#xff0c;是肝脏血液供应的主要来源。淤血后果&#xff1a;门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血&#xff0c;引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...