import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
LinkedList<Integer> linkedList = new LinkedList<>();
while (head != null) {
int value = head.val;
linkedList.add(value);
head = head.next;
}
int[] arr = new int[linkedList.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = linkedList.get(i);
}
for (int j = 0; j < arr.length / k; j++) {
reverseArray(arr, j * k, (j + 1) * k);
}
ListNode node = new ListNode(0);
ListNode result = node;
for (int i : arr) {
node.next = new ListNode(i);
node = node.next;
}
return result.next;
}
public void reverseArray(int[] arr,int start,int end) {
int left = start;
int right = end-1;
while (left < right) {
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}
本题考察的知识点是链表,所用编程语言是java。
我所使用的方法可能与题目要求有一些不同,我使用一个LinkedList存储链表的值,然后将链表转成数组。接着每K个元素进行一次转置,最后重建链表,将链表头结点返回

京公网安备 11010502036488号