力扣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;//对象可以直接用.
    }
};
相关推荐
牛油果子哥q5 分钟前
哈希表经典刷题模型与布隆过滤器精讲,哈希查重、哈希计数、双哈希映射、误判原理与工业级落地应用
数据结构·算法·哈希算法·散列表
ruxshui5 分钟前
排序算法及不同场景应用总结
算法·排序算法
Cx330❀9 分钟前
【MySQL基础】详解MySQL数据类型:底层原理、越界测试与最佳实践
linux·开发语言·数据库·c++·mysql
星恒随风13 分钟前
C++ string 入门(一)
开发语言·c++·笔记·学习
旖-旎13 分钟前
《LeetCode 200 FloodFill 岛屿数量DFS解法》
c++·算法·深度优先·力扣·floodfill
拂拉氏16 分钟前
【知识讲解-题目讲解】算法系列之动态规划入门(下)
算法·leetcode·动态规划
skywalk816319 分钟前
继续推进心语项目6.15 @CodeArts
开发语言·算法·编程
2601_9618451520 分钟前
花生十三图推思维导图|图形推理|技巧
数据结构·算法·链表·贪心算法·排序算法·线性回归·动态规划
前进吧-程序员21 分钟前
反转链表完全指南:辅助容器、三指针、头插法
数据结构·c++·链表
我不是懒洋洋23 分钟前
从零实现一个分布式配置中心:服务发现与热更新
c++