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();

本文介绍了两种方法解决链表问题,一种是将链表转换为List数组,按k分组后逐组翻转,另一种是递归地翻转指定数量的节点。两种方法的时间复杂度和空间复杂度均为O(n)。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



