力扣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;//对象可以直接用.
    }
};
相关推荐
码客-ygluu7 小时前
一个通用游戏数据服务器
c++·架构
another heaven7 小时前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
Code_Solitude7 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司7 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
文丑颜不良啊8 小时前
LeetCode2821~2840题目解析
java·leetcode
YLCHUP9 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
xiaoye-duck10 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
思麟呀10 小时前
背包DP(01背包+完全背包)
c++·算法
笑容掩饰我的失落11 小时前
区块链从小白到精通(七):Solidity 语法精讲——数据类型、函数、修饰器与事件
算法·区块链·php·智能合约·哈希算法