【剑斩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;
    }
};
相关推荐
leiming62 分钟前
c++ find 算法
算法
CoovallyAIHub4 分钟前
YOLOv12之后,AI在火场如何进化?2025最后一篇YOLO论文揭示:要在浓烟中看见关键,仅靠注意力还不够
深度学习·算法·计算机视觉
梭七y4 分钟前
【力扣hot100题】(121)反转链表
算法·leetcode·链表
cchjyq5 分钟前
嵌入式按键调参:简洁接口轻松调参(ADC FLASH 按键 屏幕参数显示)
c语言·c++·单片机·mcu·开源·开源软件
程序炼丹师5 分钟前
std::runtime_error是否会终止程序
c++
qq_433554546 分钟前
C++字符串hash
c++·算法·哈希算法
无限进步_6 分钟前
【C语言】堆(Heap)的数据结构与实现:从构建到应用
c语言·数据结构·c++·后端·其他·算法·visual studio
再难也得平7 分钟前
两数之和和字母异位词分组
数据结构·算法
CodeOfCC17 分钟前
C++ 实现ffmpeg解析hls fmp4 EXT-X-DISCONTINUITY并支持定位
开发语言·c++·ffmpeg·音视频
w陆压19 分钟前
9.野指针和悬空指针
c++·c++基础知识