leetcodetop100(29) K 个一组翻转链表

本文介绍了两种方法解决链表问题,一种是将链表转换为List数组,按k分组后逐组翻转,另一种是递归地翻转指定数量的节点。两种方法的时间复杂度和空间复杂度均为O(n)。
K 个一组翻转链表
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

方法一:将链表先变成List数组,List数组按K大小分成n块(有余数就为第n+1块),每块翻转(第n+1块不翻转),然后组成一个新的List数组,在按照新的list数组拼接成新的链表返回

时间复杂度O(n) 空间复杂度O(n) (比较好理解的做出来)

package TOP21_30;

import Util.ListNode;

import java.util.ArrayList;
import java.util.List;

//K 个一组翻转链表
//给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。
//k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
//你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
public class Top29 {
    public static ListNode reverseKGroup(ListNode head, int k) {
        if (head == null || k == 1) {
            return head;
        }
        List<Integer> list = new ArrayList<>();
        List<Integer> resutlist = new ArrayList<>();
        while (head != null) {
            list.add(head.val);
            head = head.next;
        }

        int length = list.size();
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值