【剑斩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;
    }
};
相关推荐
库玛西29 分钟前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
裕晟资质规划8 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
会周易的程序员8 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
小灰灰搞电子8 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化8 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
en.en..9 小时前
C语言 标准输入 / 输出缓冲区
算法
吃好睡好便好11 小时前
查找函数的使用
学习·算法·matlab·生活·查找函数
学习星球11 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
小灰灰搞电子11 小时前
C++ 引用折叠详解
c++