算法-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

相关推荐
爱读书的小胖13 分钟前
Codewars: A Brave New Wordle(C)解题分析
c语言·数据结构·算法
Escalating_xu14 分钟前
【数据结构】顺序表的应用:动态通讯录项目与双指针经典算法
c语言·数据结构·算法
从小白到软工1 小时前
C语言(中)预告
c语言·数据结构·经验分享·ai编程
垆边人似月.2 小时前
华为题:任务调度
数据结构·c++·算法
Logic1012 小时前
C语言/数据结构字符串题解:解压缩“字符+次数“格式——多位数字处理与字符串还原
c语言·数据结构·字符串·模拟·时间复杂度·空间复杂度·算法题
信奥卷王2 小时前
[GESP202506 六级] 最大因数(含视频)
数据结构·算法
局部有解2 小时前
Leetcode - 42 接雨水(一维)
数据结构·c++·算法·leetcode
专注API从业者2 小时前
告别手工盯盘:用 Open‑Claw 搭建电商商品自动化监控与数据分析实战
运维·数据结构·数据挖掘·数据分析·自动化
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出糖葫芦派对中的“独一无二山楂果数量“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
benchmark_cc4 小时前
批量获取股票数据后,如何统一转换成 DataFrame?从数据结构到量化研究的完整实践
数据结构·python·数据分析·量化交易·股票数据·quantdash