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

相关推荐
历程里程碑1 小时前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
ValhallaCoder8 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
月挽清风10 小时前
代码随想录第十五天
数据结构·算法·leetcode
NEXT0610 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
小妖66614 小时前
js 实现快速排序算法
数据结构·算法·排序算法
独好紫罗兰16 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n16 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
2401_8414956416 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
独好紫罗兰17 小时前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_8414956417 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归