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

字节算法-链表翻转与变形

文章目录

  • 题目与变形
  • 解法

题目与变形

字节一面中关于 K个一组链表反转 的题目变形。

  • K个一组链表反转。
  • K个一组链表反转,链表尾不足K个的元素也需要反转。
  • K个一组链表反转,但是从链表尾部开始反转。
  • 反转从位置 left 到位置 right 的链表节点

解法

四个算法万变不离其宗,主要掌握原题即可。

public class No0025ReverseGroup2 {public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5, 6, 7, 8};int k = 3;No0025ReverseGroup2 demo = new No0025ReverseGroup2();ListNode node = ListNode.createListNode(array);System.out.println("原始节点: " + node);ListNode res = demo.reverseKGroup(node, k);System.out.println("K个一组反转: " + res);ListNode res2 = demo.reverseKGroup2(ListNode.createListNode(array), k);System.out.println("剩余不足也K个反转: " + res2);ListNode res3 = demo.reverseKGroup3(ListNode.createListNode(array), k);System.out.println("从尾部开始K个一组反转: " + res3);ListNode res4 = demo.reverseKGroup4(ListNode.createListNode(array), 3, 6);System.out.println("反转指定区域的链表: " + res4);}/*** 反转 left 到 right 位置的元素*/private ListNode reverseKGroup4(ListNode listNode, int begin, int stop) {ListNode result = new ListNode();result.next = listNode;ListNode left = result;ListNode right = result;for (int i = 0; i < stop; i++) {if (i < begin - 1) {// 保持 left.next 指向反转的起始节点left = left.next;}right = right.next;}while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}return result.next;}/*** 变形2,从链表尾部开始 k 个一组反转*/private ListNode reverseKGroup3(ListNode listNode, int k) {int count = 0;ListNode countNode = listNode;while (Objects.nonNull(countNode)) {countNode = countNode.next;count++;}ListNode result = new ListNode(0);result.next = listNode;ListNode left = result;ListNode right = result;int beginIndex = count % 3;for (int i = 0; i < beginIndex; i++) {left = left.next;right = right.next;}while (true) {for (int i = 0; i < k && Objects.nonNull(right); i++) {right = right.next;}if (Objects.isNull(right)) {break;}ListNode leftPtr = left.next;while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}left = leftPtr;right = leftPtr;}return result.next;}/*** 变形1,剩余元素不足K个也需要反转*/private ListNode reverseKGroup2(ListNode listNode, int k) {ListNode result = new ListNode(0);result.next = listNode;ListNode left = result;ListNode right = result;ListNode preRight = right;while (true) {for (int i = 0; i < k && Objects.nonNull(right); i++) {preRight = right;right = right.next;}if (Objects.isNull(right)) {// 处理剩余部分的反转ListNode curr = left.next;left.next = curr.next;curr.next = preRight.next;preRight.next = curr;break;}ListNode leftPtr = left.next;while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}left = leftPtr;right = leftPtr;}return result.next;}/*** 原题,K个一组反转*/private ListNode reverseKGroup(ListNode listNode, int k) {ListNode result = new ListNode(0);result.next = listNode;ListNode left = result;ListNode right = result;while (true) {for (int i = 0; i < k && Objects.nonNull(right); i++) {right = right.next;}if (Objects.isNull(right)) {break;}ListNode leftPtr = left.next;while (left.next != right) {// 理解这里就OK了ListNode curr = left.next;left.next = curr.next;curr.next = right.next;right.next = curr;}left = leftPtr;right = leftPtr;}return result.next;}
}
// 补充自用节点类
public class ListNode {public int val;public ListNode next;public ListNode() {}public ListNode(int val) {this.val = val;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}public static ListNode createListNode(int[] array) {ListNode head = new ListNode(array[0]);ListNode node = head;for (int i = 1; i < array.length; i++) {ListNode next = new ListNode(array[i]);node.next = next;node = next;}return head;}
}

相关文章:

字节算法-链表翻转与变形

文章目录 题目与变形解法 题目与变形 字节一面中关于 K个一组链表反转 的题目变形。 K个一组链表反转。K个一组链表反转&#xff0c;链表尾不足K个的元素也需要反转。K个一组链表反转&#xff0c;但是从链表尾部开始反转。反转从位置 left 到位置 right 的链表节点 解法 四…...

十一、软考-系统架构设计师笔记-未来信息综合技术

1、信息物理系统技术概述 信息物理系统的概念 信息物理系统(Cyber-Physical Systems&#xff0c;CPS)通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术&#xff0c;构建了物理空间与信息空间中人、机、物、环境、信息等要素相互映射、适时交互、高效协同的复杂系…...

非同源点云尺度对齐及点云配准(cloudcompare软件)

1.点云裁减与尺度缩放 发现口扫stl转为的点云尺度是原始点云的1000倍 打开meshlab&#xff0c;通过“Filters” > “Mesh Layer” > “Transform: Scale”缩放1000倍&#xff0c;得到以米为单位的真实尺寸 此时在meshlab中进行点云手动裁减后效果 将ply文件转为xyz文件…...

体检业务数字化管理平台,健康体检管理系统(PEIS)源码

健康体检管理系统&#xff08;PEIS&#xff09;源码&#xff0c;自动生成体检报告&#xff0c;提供查询、统计和分析功能 健康体检管理系统&#xff08;PEIS&#xff09;可以建立完整的健康档案&#xff0c;系统实现了与HIS系统的无缝连接&#xff0c;着重于临床信息系统的应用…...

【SpringCloud微服务实战04】Nacos 配置中心

一、Nacos配置添加 二、Nacos配置读取 1、引入Nacos的配置管理客户端依赖&#xff1a; <!--nacos配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</arti…...

无雀新功能宣传板之视频直播+Teambition

1. 今日新功能 钉钉视频会议新功能 视频会议功能&#xff0c;打造了一系列独具特色的通话海报模板供用户选择。其中引人瞩目的是为龙年限定的新春主题通话海报&#xff0c;它巧妙地融入了中国传统文化元素&#xff0c;将庄重且喜庆的龙年新春气息浓缩在画面之中。 自定义通话…...

学生选课系统的最简逻辑--一个学生选一门课

需求&#xff1a;设计一个学生选课系统&#xff0c;要求如下&#xff1a;有一个学生类&#xff0c;有一个课程类&#xff0c;还有一个Teacher类。。学生类包括姓名、学号、已选课程。课程类包括课程名称、授课老师属性。 老师包括老师的名字、老师的电话&#xff0c;老师的课程…...

波司登高德康:以有“韧性”的创新应变市场新浪潮

伴随着消费升级&#xff0c;羽绒服市场需求日益旺盛。愈发多元化的需求对于企业发展也有着更高的要求。如何更好推动行业多元化发展&#xff0c;可以从波司登的品牌升级、产品创新、模式创新、数字技术创新、绿色发展创新等方面窥得一二。 高德康总裁接受新华网主持人采访 对此…...

装饰你的APP:使用Lottie-Android创建动画效果

1. Lottie-Android简介 Lottie-Android是一个强大的开源库,由Airbnb开发,旨在帮助开发者轻松地在Android应用中添加高质量的动画效果。它基于Adobe After Effects软件中的Bodymovin插件,通过解析导出的JSON文件来渲染并播放复杂的矢量动画。 Lottie-Android提供了许多令人…...

成都爱尔林江院长解析巩膜镜是什么?它适合哪些人群

巩膜镜&#xff0c;全称为硬性透氧性巩膜接触镜&#xff0c;它有着特殊设计&#xff0c;大直径镜片像桥梁一样呈拱形覆盖角膜及角巩膜缘&#xff0c;从角膜上方横跨而过完全无接触、无任何机械性摩擦&#xff0c;最终贴合于巩膜。 巩膜镜的作用原理 光学成像&#xff1a; 配戴…...

苹果cms模板保护设置,防止被扒

苹果cms模板保护设置&#xff0c;防止被扒 如今互联网时代&#xff0c;网站模板前端被扒是常有的事&#xff0c;如何防止模板数据被扒&#xff1f; 保护设置方法&#xff1a; 登录宝塔 找到安装模板的网站 设置禁止访问文件 方法参考截图后缀填&#xff1a;php|html 目录填&a…...

Claude3、GPT-4、Gemini、Sora VS :谁将成为下一代科研利器?

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…...

vue 函数防抖

背景 一个页面使用监听器&#xff0c;监听了页面的三个参数&#xff0c;页面初始化的时候&#xff0c;三个参数都发生了变化。发送了三次请求&#xff0c;页面却使用的是第二次请求的数据。希望短时间内发生多次变化的时候&#xff0c;只发送一次请求 思路 这个需求可以通过使用…...

WordPress建站入门教程:如何创建菜单和设置前端导航菜单?

前面我们跟大家分享了WordPress如何上传安装WordPress主题&#xff0c;但是启用主题后前端没有看到有导航菜单&#xff0c;这是因为我们还没有创建菜单和设置导航菜单。 JianYue主题导航菜单和右上角菜单 今天boke112百科就继续跟大家分享WordPress站点如何创建菜单和设置前端…...

Rust:为 Trait 定义默认的方法

当你提到“指定 trait 的实现”并使用 :: 符号时&#xff0c;你可能是指在某些情况下&#xff0c;你想直接通过 trait 而不是具体的类型来调用方法。这在 trait 提供了默认方法实现时尤其有用&#xff0c;因为你可以不依赖任何具体的类型实现来调用这些方法。 然而&#xff0c…...

掌握Redis,看完这篇文章就够了

一&#xff0c;数据库的配置 内存数据库 MySQL与mongodb都是以文件的形式存储在磁盘上的 redis数据在内存中&#xff0c;操作内存的速度远远高于磁盘并且redis数据最终也可以存储在磁盘上 redis的存储结构为简直存储数据库类似于python中的字典的存储方式 redis的服务器与客户…...

烟火识别检测摄像头-火焰烟雾智能检测预警系统---豌豆云

火焰烟雾智能检测预警系统利用现场已有的监控摄像头&#xff0c;火焰烟雾智能检测预警系统对监控区域内的烟雾和火焰进行识别。 这种识别技术不仅准确率高&#xff0c;而且速度快&#xff0c;能够在短时间内对大量的视频数据进行处理和分析。 同时&#xff0c;该系统还能够动…...

js【详解】Promise

为什么需要使用 Promise &#xff1f; 传统回调函数的代码层层嵌套&#xff0c;形成回调地狱&#xff0c;难以阅读和维护&#xff0c;为了解决回调地狱的问题&#xff0c;诞生了 Promise 什么是 Promise &#xff1f; Promise 是一种异步编程的解决方案&#xff0c;本身是一个构…...

八股文-持续更新......

文章目录 SpringSpringBootDubboMQMysqlNettyRedis并发ZookeeperMybatisElasticsearchLinux微服务ZookeeperMybatisElasticsearchLinux...

Redis 大key和热key问题及处理

一、说说什么是Redis、及特点&#xff1f; Redis是一个基于内存存储数据运行并支持持久化、使用key/value形式存储的高性能的nosql数据库&#xff0c;适合用于存储频繁访问&#xff0c;数据量较小的场景下。 特点&#xff1a; 支持数据持久化&#xff1a;可以将内存中的数据保…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

Psychopy音频的使用

Psychopy音频的使用 本文主要解决以下问题&#xff1a; 指定音频引擎与设备&#xff1b;播放音频文件 本文所使用的环境&#xff1a; Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...