public class Node { //定义Node节点 static class ListNode { public int val; public ListNode next = null; public ListNode(int val) { this.val = val; } } public static void main(String[] args) { //1.获取输入信息 Scanner scanner = new Scanner(System.in); String string = scanner.nextLine(); int k = scanner.nextInt(); String[] strings = string.split(" "); //2.创建头结点 ListNode head = new ListNode(0); ListNode tail = head; //3.将输入的字符串变为链表节点 for (String str : strings) { ListNode newNode = new ListNode(Integer.valueOf(str)); tail.next = newNode; tail = tail.next; } head = head.next; //每k个反转链表 ListNode node = reverseGroup(head, k); while(node!=null){ System.out.print(node.val+" "); node = node.next; } } //不停地取k个进行翻转,如果不够k个,就直接返回,结束 public static ListNode reverseGroup(ListNode head, int k) { if (head == null || head.next == null || k <= 1) return head; ListNode currentNode = head; //获取k个元素的首尾节点 for (int count = 1; count < k; count++) { currentNode = currentNode.next; //不够K个则返回 if(currentNode==null) return head; } ListNode next = currentNode.next; //对局部链表进行反转 reverse(head,currentNode); head.next=reverseGroup(next,k); return currentNode; } //写一个头尾节点反转的局部函数 public static ListNode reverse(ListNode head, ListNode tail) { if (head == null || head.next == null) return head; ListNode pre = null; ListNode next = null; while (pre != tail) { next = head.next; head.next = pre; pre = head; head = next; } return pre; } }