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

相关推荐
叩码以求索9 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana29 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
txzrxz10 小时前
单调队列讲解
数据结构·c++·算法·单调队列
Keven_1110 小时前
算法札记:树状数组的用途
数据结构·算法
cpp_250111 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解
星恒随风13 小时前
C++ STL 详解:list 的使用、迭代器失效、模拟实现与 vector 对比
开发语言·数据结构·c++·笔记·学习·list
梅梅绵绵冰13 小时前
算法题-矩阵
数据结构·算法·矩阵
奋发向前wcx1 天前
y1,y2总复习笔记5 2026.7.19
数据结构·笔记·算法
ChaoZiLL1 天前
我的数据结构4-栈和队列
数据结构
miller-tsunami1 天前
顺序表相关知识点
数据结构·顺序表