• 给定一个链表,从头开始每 k 个作为一组,将每组的链表节点翻转
  • 组与组之间的位置不变
  • 如果最后链表末尾剩余不足 k 个元素,则不翻转,直接放在最后
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) {
 
        // 反转前N个
 
        //设置虚拟节点
 
        ListNode dummy = new ListNode(-1);
 
        dummy.next = head;
 
        ListNode pre = dummy;
 
        ListNode cur = head;
 
        ListNode tail = head;
 
        ListNode start = head;
 
        for(int i = 1;i<=k;i++){
 
            if(tail == null) { //如何长度不足k,直接返回,不反转
 
                return head;
 
            }
 
            tail = tail.next;
 
        }
 
        // //设置tail为空
 
        // tail.next = null;
 
        //记录
 
        ListNode temp = null;
 
        while(cur!=tail){
 
           temp = cur.next;
 
           cur.next = pre;
 
           pre = cur;
 
           cur = temp;
 
        }
 
  
 
        //指向下一段需要翻转链表
 
        head.next = reverseKGroup(tail,k);
 
        return pre;
 
    }
 
}