题解 | #牛群的重新分组#
牛群的重新分组
https://www.nowcoder.com/practice/267c0deb9a6a41e4bdeb1b2addc64c93
知识点:链表
和以往的链表反转不同,这道题目要求对k个一组的链表进行反转,对于k个节点来说,和普通的链表反转操作步骤相同,但还需要进行额外的操作。具体来说,对于第k+1个节点,我们首先需要将其作为第1个节点的后继节点,而不是以往的空节点。其次,如果第k+1个节点后还有一组k个节点,我们就需要递归地将其转换为反转后的链表,直至剩余节点数小于k。
Java题解如下
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类 */ private int k; public ListNode reverseKGroup (ListNode head, int k) { // write code here this.k = k; ListNode node = head; int size = 0; while(node != null) { node = node.next; size++; } return reverse(head, size); } private ListNode reverse(ListNode head, int size) { if(size < k) { return head; } ListNode node = head; for(int i = 0; i < k; i++) { node = node.next; } ListNode pre = reverse(node, size - k); for(int i = 0; i < k; i++) { ListNode tmp = head.next; head.next = pre; pre = head; head = tmp; } return pre; } }