算法-K个一组翻转链表

复制代码
// 要实现没k个节点进行翻转的操作,可以按照一下步骤进行
// 1.计算链表长度
// 2.分组反转
// 3. 使用一个虚拟头节点来处理边界情况
// 4.每次处理k个节点进行反转
// 5.如果剩余节点不足k个 则保持原有顺序
// 6.依次反转每组中的节点
复制代码
// 1.使用prevGroupEEnd追踪上一个组的末尾
// 2.对于每个完整的k个节点组进行反转
// 3.设置groupStart为当前组的开头
// 4.nextGroupStart用于标记下一个组的起始点
// 5.反转当前组的节点,通过调整指针
// 6.将反转后的组重新链接到链表
// 7.更新preGroupEEnd为当前组的末尾

代码如下:

java 复制代码
public class reverseGroup {
    public  ListNode reverseKGroup(ListNode head, int k) {
        // 要实现没k个节点进行翻转的操作,可以按照一下步骤进行
        // 1.计算链表长度
        // 2.分组反转
        // 3. 使用一个虚拟头节点来处理边界情况
        // 4.每次处理k个节点进行反转
        // 5.如果剩余节点不足k个 则保持原有顺序
        // 6.依次反转每组中的节点
        // TODO
        if(head == null || k<=1){
            return head;
        }
        ListNode current = head;
        int count=0;
        while(current!=null){
            count++;
            current=current.next;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode prevGroupEEnd=dummy;
        while(count>=k){
            ListNode groupStart=prevGroupEEnd.next;
            ListNode nextGroup=groupStart;
            for(int i=0;i<k;i++){
                nextGroup=nextGroup.next;
            }
            // 反转当前组合
            ListNode prev=nextGroup;
            current=groupStart;
            for(int i=0;i<k;i++){
                ListNode temp=current.next;
                current.next=prev;
                prev=current;
                current=temp;
            }
            prevGroupEEnd.next=prev;
            prevGroupEEnd=groupStart;
            count-=k;
        }
        return dummy.next;
    }
}
// 1.使用prevGroupEEnd追踪上一个组的末尾
// 2.对于每个完整的k个节点组进行反转
// 3.设置groupStart为当前组的开头
// 4.nextGroupStart用于标记下一个组的起始点
// 5.反转当前组的节点,通过调整指针
// 6.将反转后的组重新链接到链表
// 7.更新preGroupEEnd为当前组的末尾

如果看不懂链表翻转的过程可以看下这个博主的视频,讲的挺好的。

【小白学算法】反转链表_哔哩哔哩_bilibili

相关推荐
明洞日记20 分钟前
【数据结构手册008】STL容器完全参考指南
开发语言·数据结构·c++
kingmax5421200835 分钟前
《数据结构C语言:单向链表-链表基本操作(尾插法建表、插入)》15分钟试讲教案【模版】
c语言·数据结构·链表
AI科技星43 分钟前
质量定义方程常数k = 4π m_p的来源、推导与意义
服务器·数据结构·人工智能·科技·算法·机器学习·生活
Fine姐1 小时前
数据结构04——二叉树搜索树BST
数据结构
仰泳的熊猫2 小时前
1077 Kuchiguse
数据结构·c++·算法·pat考试
LYFlied2 小时前
【每日算法】LeetCode 19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
阿里巴巴AI编程社区2 小时前
Qoder 提效实战:数据开发工程师用 Qoder 提效50%
数据结构
消失的旧时光-19432 小时前
从 C 链表到 Android Looper:MessageQueue 的底层原理一条线讲透
android·数据结构·链表
夏乌_Wx2 小时前
练题100天——DAY28:找消失的数字+分发饼干
数据结构·算法
lzh200409192 小时前
二叉搜索树与双向链表
数据结构·链表