import java.util.Scanner; // 定义链表节点类 class ListNode { int val; ListNode next; ListNode(int val) { this.val = val; this.next = null; } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 读取输入的第一行,构建链表 String[] values = scanner.nextLine().split(" "); ListNode head = buildLinkedList(values); // 读取输入的 k 值 int k = scanner.nextInt(); // 每 k 个节点一组翻转链表 head = reverseKGroup(head, k); // 输出翻转后的链表 printLinkedList(head); } // 根据字符串数组构建链表 private static ListNode buildLinkedList(String[] values) { if (values == null || values.length == 0) { return null; } ListNode dummy = new ListNode(-1); ListNode current = dummy; for (String value : values) { current.next = new ListNode(Integer.parseInt(value)); current = current.next; } return dummy.next; } // 每 k 个节点一组翻转链表 private static ListNode reverseKGroup(ListNode head, int k) { if (head == null || k <= 1) { return head; } ListNode dummy = new ListNode(-1); dummy.next = head; int n = 0; ListNode tmp = head; while (tmp != null) { ++n; tmp = tmp.next; } // int t = n % k; ListNode p0 = dummy; // for (int i = 1; i <= t; ++i) { // p0 = p0.next; // } // int len = n - t; int len = n; ListNode pre = null; ListNode cur = p0.next; while (len >= k) { len -= k; for (int i = 1; i <= k; ++i) { ListNode nxt = cur.next; cur.next = pre; pre = cur; cur = nxt; } ListNode nxt = p0.next; p0.next.next = cur; p0.next = pre; p0 = nxt; } return dummy.next; } // 打印链表 private static void printLinkedList(ListNode head) { while (head != null) { System.out.print(head.val); if (head.next != null) { System.out.print(" "); } head = head.next; } System.out.println(); } }