【剑斩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;
    }
};
相关推荐
田梓燊9 分钟前
leetcode 160
算法·leetcode·职场和发展
_深海凉_16 分钟前
LeetCode热题100-颜色分类
python·算法·leetcode
hetao17338371 小时前
2026-04-09~12 hetao1733837 的刷题记录
c++·算法
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 136. 只出现一次的数字 | C++ 哈希表&异或基础解法
c++·算法·leetcode
MWWZ1 小时前
最近的一些软件更新
opencv·算法·计算机视觉
CoovallyAIHub1 小时前
视频理解新范式:Agent不再被动看视频,LensWalk让它自己决定看哪里
算法·架构·github
汉克老师1 小时前
GESP2024年6月认证C++三级( 第二部分判断题(1-10))
c++·数组·位运算·补码·gesp三级·gesp3级
CoovallyAIHub1 小时前
斯坦福丨AirVLA:将地面机械臂模型迁移至无人机实现空中抓取,成功率从23%提升至50%
算法·架构·github
无限进步_2 小时前
【C++】只出现一次的数字 II:位运算的三种解法深度解析
数据结构·c++·ide·windows·git·算法·leetcode
Takoony2 小时前
GPU 推理并发的本质:从第一性原理到工程实践
算法·gru