题解 | #链表中的节点每k个一组翻转#
链表中的节点每k个一组翻转
https://www.nowcoder.com/practice/b49c3dc907814e9bbfa8437c251b028e
用一个数组保存链表值,将数组翻转后的值传回链表
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode reverseKGroup (ListNode head, int k) {
// write code here
ListNode temp = head;
int len = 0;
// 计算链表长度
while(temp != null){
len++;
temp = temp.next;
}
// 定义数组存放链表节点值
int[] num = new int[len];
temp = head;
int i = 0;
while(temp != null){
num[i++] = temp.val;
temp = temp.next;
}
// 遍历链表
for(int j = 0; j < len;){
// 每k个进行翻转,最后不足k个直接结束
if(j + k - 1 < len){
merge(num, j , j + k - 1);
j = j + k;
}else{
j = len;
}
}
temp = head;
int t = 0;
// 遍历链表,将链表每个节点的值替换成翻转后对应数组的值
while(temp != null){
temp.val = num[t++];
temp = temp.next;
}
return head;
}
// 翻转每k个为一组的数组
public void merge(int[] num, int m, int n){
while(m < n){
int temp = num[m];
num[m] = num[n];
num[n] = temp;
m++;
n--;
}
}
}

