leetcode之hot100---25K个一组翻转链表(C++)

server/2024/12/26 14:48:54/

从表头开始遍历,找到组内最后一个节点,同时检查剩余节点是否大于等于K

根据组内表头节点和表尾结点对子链表进行翻转,同时返回新的头和尾

继续遍历链表寻找需要进行翻转的子链表进行翻转

根据返回的新的头和尾将子链表和原有链表进行连接,直至不在有k个节点

其中,子链表翻转和返回新头尾的图示如下::

0:初始状态

        ListNode* prev = tail->next;
        ListNode* p = head;

1: 进行翻转

        p->next = prev;

2:翻转后更新节点

        prev = p;

        p = nex;

3: 继续进行翻转

        p->next = prev;

4:翻转后更新节点

        prev = p;

        p = nex;

 

此时prev == tail子链表翻转结束 ,返回新的头(tail)尾(head)

翻转后子链表和原有链表进行连接的图示如下:

ListNode* nex = tail->next;

pre->next = head;

tail->next = nex;

 链接后指针的更新(方便进行下一次翻转)

 

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:pair<ListNode*, ListNode*> myReverse(ListNode* head, ListNode* tail){ListNode* prev = tail->next;ListNode* p = head;while(prev != tail){ListNode* nex = p->next;p->next = prev;prev = p;p = nex;}return {tail, head};}ListNode* reverseKGroup(ListNode* head, int k) {ListNode* hair = new ListNode(0, head);ListNode* pre = hair;while(head){ListNode* tail = pre;for(int i = 0; i < k; i++){tail = tail->next;if(!tail){return hair->next;}}ListNode* nexNode = tail->next;//翻转当前分组内节点,获取新翻转区间的头尾指针tie(head, tail) = myReverse(head, tail);//将翻转后的子链表与原链表连接起来pre->next = head;tail->next = nexNode;pre = tail;head = tail->next;}return hair->next;}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

http://www.ppmy.cn/server/153349.html

相关文章

圣诞快乐(h5 css js(圣诞树))

一&#xff0c;整体设计思路 圣诞树h5&#xff08;简易&#xff09; 1.页面布局与样式&#xff1a; 页面使用了全屏的黑色背景&#xff0c;中央显示圣诞树&#xff0c;树形由三层绿色的三角形组成&#xff0c;每一层的大小逐渐变小。树干是一个棕色的矩形&#xff0c;位于三角…

亚马逊旺季余温犹存,销量排名如何维稳?

冬季旺季过后&#xff0c;不少卖家都可以清晰感受到销量断崖式的下跌&#xff0c;诚然旺季带来的流量消减会带来大量的下跌&#xff0c;虽然说这是旺季狂欢后的惨淡&#xff0c;但实际上需求还是有待挖掘&#xff0c;我们应该做什么来稳住销量与排名呢&#xff1f; 一、旺季复盘…

【k8s】访问etcd

1. 配置 export.sh export ETCDCTL_API3 # Kubernetes 1.13 使用 API v3 export ETCDCTL_ENDPOINTShttps://[2023:145:246:270::3]:2379 # etcd API endpoint&#xff0c;通常为集群内的 etcd 服务地址 export ETCDCTL_CACERT/etc/kubernetes/certs/ca.crt # CA 证书文件 …

使用vcpkg安装opencv>=4.9后#include<opencv2/opencv.hpp>#include<opencv2/core.hpp>无效

使用vcpkg安装opencv>4.9后#include<opencv2/opencv.hpp>#include<opencv2/core.hpp>无效\无法查找或打开 至少从2024年开始&#xff0c;发布的vcpkg默认安装的opencv版本都是4.x版。4.8版本及以前&#xff0c;vcpkg编译后的opencv头文件目录是*/vcpkg/x64-win…

Hive其五,使用技巧,数据查询,日志以及复杂类型的使用

目录 一、关于Hive使用的一些技巧 二、表的数据查询 三、Hive默认的日志 四、复杂数据类型 1、Array的使用 2、展开函数的使用 explode 3、Map的使用 4、Struct结构体 一、关于Hive使用的一些技巧 1、可以直接不进入hive的情况下执行sql语句 通过shell的参数 -e 可以执…

「Python数据科学」标量、向量、矩阵、张量与多维数组的辨析

引言 在数据科学中&#xff0c;有很多概念&#xff0c;其中&#xff0c;最容易搞混的就是标量、向量、矩阵、张量了。具体到这些概念的落地实现&#xff0c;又与多维数组有着密不可分的联系。 本文就来尝试对这些概念进行简要地梳理&#xff0c;从而更加清晰地理解这些概念及…

斐波那契数【东北大学oj数据结构10-1】C++

编写一个程序&#xff0c;打印给定整数 n 的第 n 个斐波那契数。 第 n 个斐波那契数由以下递归公式定义&#xff1a; f(n){1 n0,1&#xff1b; f(n−1)f(n−2)​​ n>1​.} 输入 给出一个整数 n。 输出 在一行中打印第 n 个斐波那契数。 约束 0≤n≤44 输入样例 3 输出…

Ubuntu 24.04 APT源配置详解

引言 在Ubuntu系统中&#xff0c;APT&#xff08;Advanced Package Tool&#xff09;是用于安装、更新和管理软件包的核心工具。了解APT源配置对于系统管理员和用户来说至关重要&#xff0c;因为它决定了软件包的来源和更新渠道。本文将详细介绍Ubuntu 24.04中的APT源配置&…