【链表 - 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;
    }
};
相关推荐
tao3556671 天前
【Python刷力扣hot100】42. Trapping Rain Water
开发语言·python·leetcode
Miraitowa_cheems1 天前
LeetCode算法日记 - Day 88: 环绕字符串中唯一的子字符串
java·数据结构·算法·leetcode·深度优先·动态规划
小白菜又菜1 天前
Leetcode 1518. Water Bottles
算法·leetcode·职场和发展
不语n1 天前
快速排序(Quick Sort)详解与图解
数据结构·算法·排序算法·快速排序·双指针排序
三萬Q1 天前
数据结构--并查集
数据结构
桦说编程1 天前
如何在Java中实现支持随机访问的固定窗口队列
java·数据结构·后端
py有趣1 天前
LeetCode算法学习之杨辉三角
学习·算法·leetcode
小白菜又菜1 天前
Leetcode 3100. Water Bottles II
算法·leetcode·职场和发展
MrZhangBaby1 天前
SQL-leetcode—3475. DNA 模式识别
数据库·sql·leetcode