力扣K个一组翻转链表C++

题目


知识点


思路

最好画图解决,直观易懂


错误

第一层for循环 是需要执行几次翻转,第二层for循环 是执行一次翻转k次移动


题解

cpp 复制代码
class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        int n = 0;//链表元素个数
        for (ListNode* p = head; p; p = p->next) {
            n++;
        }

        //栈上定义dummy对象,函数return后直接销毁
        ListNode dummy(0, head);//虚拟头节点
        ListNode* cur = head;//指针cur指向当前遍历到的结点
        ListNode* pre = NULL;//pre指针指向翻转后的链表的头节点
        ListNode* q = &dummy;//q指向dummy(q始终指向要处理结点的前一个结点)

        //控制翻转几组
        for (; k <= n; n -= k) {
            //翻转k个元素
            for (int i = 0; i < k; i++) {
                ListNode* next = cur->next;
                cur->next = pre;
                pre = cur;
                cur = next;
            }

            //链接翻转后的组
            ListNode* next = q->next;//next指向翻转后小链表的末尾节点
            
            //next指向翻转后小链表的末尾节点 指向后面的链表
            q->next->next = cur;//翻转后的链表和后面的链表连接起来
            q->next = pre;//dummy指向新链表的第一个结点
            q = next;//q指向下一组的前一个结点(q始终指向要处理结点的前一个结点)
        }
        return dummy.next;//对象可以直接用.
    }
};
相关推荐
小成202303202652 小时前
C++~07补充
开发语言·c++
小郎君6582 小时前
MPTT树复选框的半选状态:一棵百万节点树从递归到计数器,再到区间覆盖
算法
酌沧2 小时前
MemT让记忆成为模型内生能力
jvm·人工智能·算法
hold?fish:palm2 小时前
40 二叉树的直径
c++·leetcode
Shimeri3 小时前
越卷越像:我用遗传算法做了个"内卷"实验
算法·three.js·数据可视化·遗传算法·进化算法
解决小子3 小时前
【虚幻引擎】【C++】【GAS框架】构建角色基类、属性集、数值钳制
c++·笔记·游戏引擎·虚幻·gas·能力系统
Evand J3 小时前
【PMSM例程1】永磁同步电机(PMSM)转速与转子电角度观测算法|基于扩展卡尔曼滤波(EKF)的传感器状态估计与误差。附下载链接
算法·电机·1024程序员节·卡尔曼滤波
guo_wen_qiang3 小时前
二叉树的层序遍历-使用双端队列Deque
算法·leetcode·1024程序员节
爱读书的小胖4 小时前
LeetCode 55 跳跃游戏 C 语言解题分析
c语言·数据结构·算法·leetcode·1024程序员节
CCblandy4 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化