K个节点的组内逆序调整

这篇博客介绍了如何实现链表中每K个节点的逆序操作。通过两个辅助子方法,一个用于获取从给定节点开始的第K个节点,另一个用于反转指定范围内的链表节点,主方法能够将链表按K个节点为一组进行内部逆序。当链表长度不足以形成K个节点的组时,保持原有顺序。示例展示了K=3时的链表调整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定一个单链表的头节点head,和一个正数k

实现k个节点的小组内部逆序,如果最后一组不够k个就不调整例子:

调整前∶1 ->2-> 3-> 4 ->5-> 6->7 ->8, k = 3

调整后∶3-> 2 ->1-> 6->5-> 4 ->7 -> 8

先准备两个子方法;

子方法1:获取从当前节点开始的第K个节点; 若不足K个,返回null。

	public static Node getKGroupEnd (Node start, int k) {
        while (--k != 0 ) {
            if (start == null) {
                return start;
            }
            start = start.next;
        }
        return start;
    }

子方法2:给定一个头结点和尾节点,对二者及其中间节点反转;

例: 1 ->2-> 3-> 4

若传入(1,3),则返回 3->2->1->4

	public static void reverse (Node start, Node end) {
        end = end.next;
        Node pre = end;
        Node next = null;
        while (start != end) {
            next = start.next;
            start.next = pre;
            pre = start;
            start = next;
        }
    }

主方法:

获取头结点;

满足K个时,每K个一组逆序;

若不满足K个,直接返回头结点;

	public static Node reverseKGroupList (Node head, int K) {
        Node start = head;
        Node end = getKGroupEnd(start,K);
        if (end == null) {
            return head;
        }
        //获取头节点
        head = end;
        reverse(start,end);
        Node lastEnd = start;
        while (lastEnd.next != null) {
            start = lastEnd.next;
            end = getKGroupEnd(start,K);
            //若不满足K个,返回头结点
            if (end == null) {
                return head;
            }
            //K个一组逆序
            reverse(start,end);
            lastEnd.next = end;
            lastEnd = start;
        }
        return head;
    }

测试:1 ->2-> 3-> 4 ->5-> 6 , K=2

调整前:
1 2 3 4 5 6 
调整后:
2 1 4 3 6 5 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superzheng__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值