LeetCode_25_困难_K个一组翻转链表

文章目录

  • 1. 题目
  • 2. 思路及代码实现(Python)
    • 2.1 模拟


1. 题目

给你链表的头节点 h e a d head head ,每 k k k 个节点一组进行翻转,请你返回修改后的链表。

k k k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k k k 的整数倍,那么请将最后剩余的节点保持原有顺序。不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

  • 是否可以设计一个只用 O ( 1 ) O(1) O(1) 额外内存空间的算法解决此问题?

示例 1:

在这里插入图片描述

输入: h e a d = [ 1 , 2 , 3 , 4 , 5 ] , k = 2 head = [1,2,3,4,5], k = 2 head=[1,2,3,4,5],k=2
输出: [ 2 , 1 , 4 , 3 , 5 ] [2,1,4,3,5] [2,1,4,3,5]

示例 2:

输入: h e a d = [ 1 , 2 , 3 , 4 , 5 ] , k = 3 head = [1,2,3,4,5], k = 3 head=[1,2,3,4,5],k=3
输出: [ 3 , 2 , 1 , 4 , 5 ] [3,2,1,4,5] [3,2,1,4,5]


提示

  • 链表中的节点数目为 n n n
  • 1 < = k < = n < = 5000 1 <= k <= n <= 5000 1<=k<=n<=5000
  • 0 < = N o d e . v a l < = 1000 0 <= Node.val <= 1000 0<=Node.val<=1000

2. 思路及代码实现(Python)

2.1 模拟

我们需要把链表节点按照 k k k 个一组分组,所以可以使用一个指针 h e a d head head 依次指向每组的头节点。这个指针每次向前移动 k k k 步,直至链表结尾。对于每个分组,我们先判断它的长度是否大于等于 k k k。若是,我们就翻转这部分链表,否则不需要翻转。

在翻转子链表的时候,我们不仅需要子链表头节点 h e a d head head,还需要有 h e a d head head 的上一个节点 p r e pre pre,以便翻转完后把子链表再接回 p r e pre pre。但是对于第一个子链表,它的头节点 h e a d head head 前面是没有节点 p r e pre pre 的,这时候可以新建一个节点,把它接到链表的头部,让它作为 p r e pre pre 的初始值,这样 h e a d head head 前面就有了一个节点,我们就可以避开链表头部的边界条件。反复移动指针 h e a d head head p r e pre pre,对 h e a d head head 所指向的子链表进行翻转,直到结尾,我们就得到了答案。

该算法的时间复杂度为 O ( n ) O(n) O(n) n n n 为链表长度;空间复杂度为 O ( 1 ) O(1) O(1)

class Solution:# 翻转一个子链表,并且返回新的头与尾def reverse(self, head: ListNode, tail: ListNode):prev = tail.nextp = headwhile prev != tail:nex = p.nextp.next = prevprev = pp = nexreturn tail, headdef reverseKGroup(self, head: ListNode, k: int) -> ListNode:hair = ListNode(0)hair.next = headpre = hairwhile head:tail = pre# 查看剩余部分长度是否大于等于 kfor i in range(k):tail = tail.nextif not tail:return hair.nextnex = tail.nexthead, tail = self.reverse(head, tail)# 把子链表重新接回原链表pre.next = headtail.next = nexpre = tailhead = tail.nextreturn hair.next

执行用时:44 ms
消耗内存:17.11 MB

题解来源:力扣官方题解

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

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

相关文章

kafka消费端消息去重方案

背景 我们在日常工作中&#xff0c;消费kafka消息是一个最常见的操作&#xff0c;不过由于kafka队列中经常包含重复的消息&#xff0c;并且消息量巨大&#xff0c;所以我们消费端总是需要先把消息进行去重后在消费&#xff0c;以减少消费端的压力&#xff0c;那么日常中我们一…

docker的简单使用

在一些进行使用靶场或者工具的时候&#xff0c;我们可以用docker在线拉取&#xff0c;就可以省去手动搭建靶场的过程 一、docker的配置 因为docker是默认从docker的官网进行拉取&#xff0c;所以拉取经常速度很慢或者失败&#xff0c;我们先要进行一下配置&#xff0c;让他优…

电力系统的数字孪生开发流程

电力系统的数字孪生开发流程通常涉及以下关键步骤&#xff0c;这些步骤构成了电力系统数字孪生开发的基本流程。在实际开发过程中&#xff0c;可能会根据具体项目的要求和特点进行调整和补充。例如&#xff0c;可能会加入模型验证的环节以确保模型的准确性&#xff0c;或者加入…

【Ubuntu】将多个python文件打包为.so文件

1.为什么要将python打包为.so文件&#xff1f; 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…

常见的几种echarts类型

一&#xff1a;折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

ES单节点部署

ES 拉取镜像 docker pull elasticsearch:7.10.1启动容器 docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.typesingle-node" -e "ES_JAVA_OPTS-Xms1g -Xmx1g" -v /es_data:/usr/share/elasticsearch/data --name es 558380375f1a注&#xff1a…

Python爬虫——Scrapy-1

目录 简介 安装 基本使用 1. 创建爬虫的项目 2. 创建爬虫文件 3. 运行爬虫代码 scrapy项目组成 scrapy工作原理 ​编辑 58同城 scrapy架构组成 汽车之家 总结 简介 Scrapy 是一个基于 Python 的开源网络爬虫框架&#xff0c;它可以帮助开发者快速、高效地构…

一个系列很多样式的wordpress外贸建站模板

菌菇干货wordpress跨境电商模板 食用菌、羊肚菌、牛肝菌、香菇、干黄花菜、梅干菜、松茸wordpress跨境电商模板。 https://www.jianzhanpress.com/?p3946 餐饮调味wordpress跨境电商模板 豆制品、蛋黄糖、烘焙、咖啡、调料、调味酱、餐饮调味wordpress跨境电商模板。 http…

【python】成功解决ModuleNotFoundError: No module named ‘tensorboardX‘

【python】成功解决ModuleNotFoundError: No module named ‘tensorboardX’ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f…

【EI会议征稿通知】第二届电力、电网与储能国际学术会议(PGES 2024)

第二届电力、电网与储能国际学术会议(PGES 2024) 2024 2nd International Conference on Power, Grid and Energy Storage (PGES 2024) 第二届电力、电网与储能国际学术会议(PGES 2024)将于2024年6月21-23日于中国昆明召开。会议将围绕电力、电网与储能等领域中的最新研究成果…

FPGA——三速自适应以太网设计(1)基本模块

FPGA——以太网设计&#xff08;1&#xff09;基本模块 1. 协议解析&#xff08;1&#xff09;MAC层&#xff08;2&#xff09;IP层 和 ARP层&#xff08;3&#xff09;UDP层 和 ICMP层 2.1 MAC接收模块2.2 MAC发送模块3.1 IP接收模块3.2 IP发送模块4.1 UDP接收模块4.2 UDP发送…

SpringCloud 微服务架构编码构建

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第一篇&#xff0c;即不使用 SpringCloud 组件进行模块之间的调用&#xff0c;后续会有很多的文章循序渐…