力扣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;//对象可以直接用.
    }
};
相关推荐
小O的算法实验室7 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
码匠许师傅7 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
Tbisnic8 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
Brilliantwxx8 小时前
【算法从零到千】【55-58】哈希位图+常见数学运算 接口
算法
空堂与归9 小时前
用户分群找不到规律?用K-Means聚类算法自动发现数据模式
算法·机器学习·kmeans·聚类
动词ing10 小时前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习10 小时前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
一只小小的芙厨10 小时前
基础数论总结
笔记·学习·算法
夜不会漫长12 小时前
C++入门(1)
开发语言·c++·算法
wen_zhufeng12 小时前
IndexTTS 2.5 技术报告
人工智能·算法·机器学习