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

一、题目解析

1、每k个一组进行翻转

2、不允许单纯交换节点内部的值

二、算法原理

解法:模拟

1、遍历链表得到总节点数n,n/=k,得到需要翻转的组数n

利用cur遍历链表,若cur不为空,则n++,cur=cur->next

2、重复n次,长度为k的链表逆序,使用头插法

我们tmp记录每组第一个插入的节点,为了便于下组头插

3、剩下的直接链接到后面,释放哨兵位头结点

三、代码示例

cpp 复制代码
class Solution {
public:
    ListNode* reverseKGroup(ListNode* head, int k)
    {
        //先求需要翻转的组数n
        int n  = 0;
        ListNode* cur = head;
        while(cur)
        {
            n++;
            cur = cur->next;
        }
        n/=k;
        ListNode* newhead = new ListNode(0);
        cur = head;
        ListNode* tmp = nullptr,*prev = newhead,*next = nullptr;
        //重复n次长度为k的链表翻转
        while(n--)
        {
            tmp = cur;
            for(int i = k;i>0;i--)
            {
                if(cur)
                    next = cur->next;
                if(cur)
                    cur->next = prev->next;
                prev->next = cur;
                cur = next;
            }
            prev = tmp;
        }
        //链接剩下的节点
        prev->next = cur;
        cur = newhead->next;
        //释放哨兵位头结点
        delete newhead;
        return cur;
    }
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注支持一波,我们下期再见!

相关推荐
罗超驿13 小时前
2.LeetCode 1089. 复写零——双指针解法学习笔记
java·算法·leetcode
khalil102013 小时前
代码随想录算法训练营Day-41动态规划08 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II、123.买卖股票的最佳时机III
数据结构·c++·算法·leetcode·动态规划
1104.北光c°13 小时前
Leetcode215 三种写法完成数组中的第K个最大元素 【hot100算法个人笔记】【java写法】
java·笔记·程序人生·算法·leetcode·排序算法·快速选择
无限进步_14 小时前
【C++】AVL树完全解析:从平衡因子到四种旋转
c语言·开发语言·数据结构·c++·后端·算法·github
浅念-14 小时前
LeetCode最短路必看:BFS算法原理+经典题解
数据结构·c++·算法·leetcode·职场和发展·bfs·宽度优先
流年如夢15 小时前
顺序表的应用 --> 简单通讯录的实现
c语言·数据结构
如君愿15 小时前
考研复习 Day 31 | 习题--计算机网络 第五章(运输层 中)、数据结构 图 (中)
数据结构·计算机网络·课后习题
代码地平线15 小时前
【数据结构】二叉树详解:全代码逐行解析+6道LeetCode高频OJ题图解
数据结构·算法·leetcode
田梓燊15 小时前
翻转二叉树
leetcode
流年如夢15 小时前
顺序表(LeetCode)
c语言·数据结构·leetcode·职场和发展