【链表 - LeetCode】25. K 个一组翻转链表

25. K 个一组翻转链表 - 力扣(LeetCode)

题解

递归解法

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) {
        if (head == nullptr) return nullptr;
        ListNode* prev = head;
        ListNode* index = head->next;
        int m = 0;
        // 考虑每k个情况,单链表反转
        while (++m < k && index != nullptr) {
            prev->next = index->next;
            index->next = head;
            head = index;
            index = prev->next;
        }
        if (m < k) {
            return reverseKGroup(head, m);
        }
        // 注意这里是index,即下一组的头
        prev->next = reverseKGroup(index, k);
        return head;
    }
};

迭代

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) {
       ListNode* dummy = new ListNode(0, head);
       ListNode* prev = dummy;
       ListNode* cur = head;
       int n = 0; // 链表长度
       while(cur != nullptr){
            n ++;
            cur = cur->next;
       }
       n = n / k;
       cur = head;
       for(int i = 1; i <= n *(k-1); i++){
            ListNode* nxt = cur->next;
            cur->next = nxt->next;
            nxt->next = prev->next;
            prev->next = nxt;
            if(i % (k-1) == 0){
                prev = cur;
                cur = cur->next;
            }
       }
       return dummy->next;
    }
};
相关推荐
闪电悠米3 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
WL学习笔记4 小时前
堆(数据结构)
数据结构·
闪电悠米8 小时前
力扣hot100-73.矩阵置零-标记数组详解
算法·leetcode·矩阵
wabs6668 小时前
关于图论【卡码网100.最大岛屿的面积的思考】
数据结构·算法·图论
yuannl109 小时前
图的最短路径Dijkstra
数据结构
zander25811 小时前
138. 随机链表的复制
数据结构·算法·链表
过期动态11 小时前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
来一碗刘肉面11 小时前
栈在递归中的应用
数据结构·算法
皓月斯语11 小时前
程序设计语言的特点
开发语言·数据结构·c++
邪修king12 小时前
C++ 进阶终章:异常机制与智能指针全解 —— 从错误处理到 RAII 资源管理,打通现代 C++ 的核心命脉
android·数据结构·c++