【面试经典 150 | 链表】K 个一组翻转链表

news/2024/9/24 12:33:12/

文章目录

  • 写在前面
  • Tag
  • 题目来源
  • 解题思路
  • 写在最后

写在前面

本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……

专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:

  • Tag:介绍本题牵涉到的知识点、数据结构;
  • 题目来源:贴上题目的链接,方便大家查找题目并完成练习;
  • 题目解读:复述题目(确保自己真的理解题目意思),并强调一些题目重点信息;
  • 解题思路:介绍一些解题思路,每种解题思路包括思路讲解、实现代码以及复杂度分析;
  • 知识回忆:针对今天介绍的题目中的重点内容、数据结构进行回顾总结。

Tag

链表-反转】【迭代


题目来源

25. K 个一组翻转链表


解题思路

方法一:迭代

思路

根据题目要求,我们需要将链表中每 k 个节点翻转。我们先统计链表中的节点数,然后每 k 个节点作为一组,在这一组中进行链表翻转,翻转后我们利用一个节点 p0 将已经翻转的节点和接下来将要翻转的节点沟通起来。

先看代码,代码参考自 灵茶山艾府的题解。

代码

class Solution {
public:ListNode *reverseKGroup(ListNode *head, int k) {int n = 0;for (ListNode *cur = head; cur; cur = cur->next)++n; // 统计节点个数ListNode *dummy = new ListNode(0, head), *p0 = dummy;ListNode *pre = nullptr, *cur = head;for (; n >= k; n -= k) {for (int i = 0; i < k; ++i) { // 翻转链表ListNode *nxt = cur->next;cur->next = pre;pre = cur;cur = nxt;}ListNode *nxt = p0->next;p0->next->next = cur;p0->next = pre;p0 = nxt;}return dummy->next;}
};

结合 示例 1 对上述代码进行图解。

外循环 1 中,我们根据 206. 反转链表 先将第一组的链表反转。接着更新指针 p0 指向第二组链表的头结点。

同理可以得到 外循环 2 的结果。

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为链表的节点个数。

空间复杂度: O ( 1 ) O(1) O(1)


写在最后

如果您发现文章有任何错误或者对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度的方法,欢迎评论区交流。

最后,感谢您的阅读,如果有所收获的话可以给我点一个 👍 哦。


http://www.ppmy.cn/news/1430787.html

相关文章

学习笔记Day21:转录组差异分析

转录组差异分析 差异分析难点在于将数据处理成需要的格式 表达矩阵 数值型矩阵-count 行名是symbol 低表达量的基因需要过滤 分组信息 因子&#xff0c;对照组在level第一位 与表达矩阵的列一一对应 项目名称 字符串&#xff08;不要有特殊字符&#xff09; TCGA-XX…

深入探索:Facebook如何重塑社交互动

在当代社会中&#xff0c;社交互动已成为日常生活的核心组成部分。而在众多的社交媒体平台中&#xff0c;Facebook凭借其卓越的用户基础和创新的功能&#xff0c;已经成为了全球最大的社交媒体平台。本文将深入探讨Facebook如何通过其独特的特性和功能&#xff0c;重塑了人们的…

笔试题4 -- 除2!(k次机会偶数除2求最小和)

除2&#xff01;(k次机会偶数除2求最小和) 文章目录 除2&#xff01;(k次机会偶数除2求最小和)读懂题目方案一&#xff08;基于multiset实现 -- 超时&#xff09;方案二&#xff08;改进算法--基于 priority_queue 实现&#xff09;总结 题目链接&#xff1a; 除2&#xff01;…

【MySQL 数据宝典】【磁盘结构】- 002 数据字典

一、数据字典 ( Data Dictionary ) 1.1 背景介绍 我们平时使用 INSERT 语句向表中插入的那些记录称之为用户数据&#xff0c;MySQL只是作为一个软件来为我们来保管这 些数据&#xff0c;提供方便的增删改查接口而已。但是每当我们向一个表中插入一条记录的时候&#xff0c;MyS…

Environment Modules工具

Environment Modules工具 简介 Module是一个环境变量管理工具&#xff0c;可以很好的实现开发环境的切换。 具体可以查看官网文档 安装 安装&#xff08;安装完成之后需要exit重新登录一下才会生效&#xff09; yum install -y environment-modules命令介绍 module avai…

Vue2 基础学习-案例实践

数据管理信息的增删改查的实践 主要应用&#xff1a; 数据插值&#xff1a; {{xxx}}双向绑定&#xff1a;v-model点击事件函数&#xff1a;click列表xxx的增删改实现 xxx.push(row) 增加xxx.splice(id,1) 删除 一行{x,y} xxx[id]; 编辑 <!DOCTYPE html> <html la…

(避雷指引:管理页面超时问题)windows下载安装RabbitMQ

一、背景&#xff1a; 学习RabbitMQ过程中&#xff0c;由于个人电脑性能问题&#xff0c;直接装在windows去使用RabbitMQ&#xff0c;根据各大网友教程&#xff0c;去下载安装完之后&#xff0c;使用web端进行简单的入门操作时&#xff0c;总是一直提示超时&#xff0c;要么容…

mysql面试题七(集群)

目录 1.mySQL 中有哪些常见日志 错误日志&#xff08;Error Log&#xff09; 二进制日志&#xff08;Binary Log, Binlog&#xff09; 重做日志&#xff08;Redo Log&#xff09; 回滚日志&#xff08;Undo Log&#xff09; 慢查询日志&#xff08;Slow Query Log&#xf…