【剑斩OFFER】算法的暴力美学——K 个一组翻转链表

一、题目描述

二、算法原理

思路:

1)计算要逆序的链表对

2)创建一个哨兵位,分别把要逆序的结点头插到这个哨兵位上

插入完一对逆序对之后:

再头插到 prev 结点的后面:

3)把除链表逆序对的结点插入到这个哨兵位的最后结点上

三、代码实现

cpp 复制代码
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k) {
        //计算链表的长度
        int length = 0;
        ListNode* node = head;
        while(node)
        {
            length++;
            node = node->next;
        }
        //计算要逆序链表中的对数
        int size = length / k;
        ListNode* head2 = new ListNode(0);//哨兵位
        ListNode* prev = head2;//头插的位置
        ListNode* cur = head;
        int num = 0;//记录插入的个数
        while(size)
        {
            prev->next = cur;
            ListNode* next_prev = cur;//下一个头插的结点
            ListNode* tmp = cur->next;
            cur->next = nullptr;
            num++;
            cur = tmp;
            while(num != k)
            {
                tmp = prev->next;
                prev->next = cur;
                num++;
                ListNode* next_cur = cur->next;
                cur->next = tmp;
                cur = next_cur;
            }
            prev = next_prev;
            num = 0;
            size--;//每逆行一对就减一
        }

        if(cur) prev->next = cur;//连接逆转之后剩余的结点
        ListNode* result = head2->next;
        delete head2;
        return result;
    }
};
相关推荐
白云千载尽几秒前
cosmos系列模型的推理使用——cosmos transfer2.5
算法·大模型·世界模型·自动驾驶仿真·navsim
2401_89145046几秒前
基于C++的游戏引擎开发
开发语言·c++·算法
@Aurora.3 分钟前
优选算法【专题六_模拟】
算法
MicroTech20255 分钟前
微算法科技(NASDAQ :MLGO)探索量子Hadamard门技术,增强量子图像处理效率
图像处理·科技·算法
小y要自律6 分钟前
08 string容器 - 字符串比较
开发语言·c++·stl
进击的小头6 分钟前
移动平均滤波器:从原理到DSP ADC采样实战(C语言实现)
c语言·开发语言·算法
历程里程碑6 分钟前
Linux 6 权限管理全解析
linux·运维·服务器·c语言·数据结构·笔记·算法
历程里程碑11 分钟前
双指针--双数之和
开发语言·数据结构·c++·算法·排序算法·哈希算法·散列表
好学且牛逼的马12 分钟前
【Hot100|13-LeetCode 56. 合并区间】
数据结构·算法·leetcode
yanlou23317 分钟前
【C++/Linux实战项目】仿muduo库实现高性能Reactor模式TCP服务器(深度解析)
linux·服务器·c++·tcp/ip·epoll