题解 | #链表中的节点每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--; } } }