力扣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;//对象可以直接用.
    }
};
相关推荐
luj_176815 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
mCell16 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
远离UE417 小时前
UE5 compute shader 原子加
开发语言·c++·ue5
C+-C资深大佬17 小时前
C++ 显式类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
KaMeidebaby18 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176818 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
取地址符18 小时前
C++学习笔记(基于learn-cxx)(1)
c++·经验分享·笔记·学习
tmlx3I08118 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习
不相心 -w-19 小时前
基础-滑动窗口-(定长 | 不定长)
算法
思麟呀19 小时前
C++17(三)if constexpr+折叠表达式
开发语言·c++