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

相关推荐
chao_7892 小时前
回溯题解——子集【LeetCode】二进制枚举法
开发语言·数据结构·python·算法·leetcode
秋说2 小时前
【PTA数据结构 | C语言版】将数组中元素反转存放
c语言·数据结构·算法
qqxhb3 小时前
零基础数据结构与算法——第四章:基础算法-排序(中)
数据结构·算法·排序算法·归并·快排·堆排
木叶丸4 小时前
编程开发中,那些你必须掌握的基本概念
前端·数据结构·编程语言
Y1nhl5 小时前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
手握风云-6 小时前
优选算法的链脉之韵:链表专题
数据结构·算法·链表
老虎06277 小时前
数据结构(Java)--位运算
java·开发语言·数据结构
小汉堡编程11 小时前
数据结构——vector数组c++(超详细)
数据结构·c++
雾里看山14 小时前
顺序表VS单链表VS带头双向循环链表
数据结构·链表
好好研究17 小时前
学习栈和队列的插入和删除操作
数据结构·学习