# K 个一组翻转链表

<p>给你一个链表，每 <em>k </em>个节点一组进行翻转，请你返回翻转后的链表。</p><p><em>k </em>是一个正整数，它的值小于或等于链表的长度。</p><p>如果节点总数不是 <em>k </em>的整数倍，那么请将最后剩余的节点保持原有顺序。</p><p><strong>进阶：</strong></p><ul>	<li>你可以设计一个只使用常数额外空间的算法来解决此问题吗？</li>	<li><strong>你不能只是单纯的改变节点内部的值</strong>，而是需要实际进行节点交换。</li></ul><p> </p><p><strong>示例 1：</strong></p><img alt="" src="https://img-service.csdnimg.cn/img_convert/73746d9eacbf48526f3aa7f3051d929a.jpeg" style="width: 542px; height: 222px;" /><pre><strong>输入：</strong>head = [1,2,3,4,5], k = 2<strong><br />输出：</strong>[2,1,4,3,5]</pre><p><strong>示例 2：</strong></p><img alt="" src="https://img-service.csdnimg.cn/img_convert/202a5b66c99b0dba832f105fae9a47ce.jpeg" style="width: 542px; height: 222px;" /><pre><strong>输入：</strong>head = [1,2,3,4,5], k = 3<strong><br />输出：</strong>[3,2,1,4,5]</pre><p><strong>示例 3：</strong></p><pre><strong>输入：</strong>head = [1,2,3,4,5], k = 1<strong><br />输出：</strong>[1,2,3,4,5]</pre><p><strong>示例 4：</strong></p><pre><strong>输入：</strong>head = [1], k = 1<strong><br />输出：</strong>[1]</pre><ul></ul><p><strong>提示：</strong></p><ul>	<li>列表中节点的数量在范围 <code>sz</code> 内</li>	<li><code>1 <= sz <= 5000</code></li>	<li><code>0 <= Node.val <= 1000</code></li>	<li><code>1 <= k <= sz</code></li></ul>

以下程序实现了这一功能，请你填补空白处内容：

```java

public class ListNode {
	int val;
	ListNode next;

	ListNode() {
	}

	ListNode(int val) {
		this.val = val;
	}

	ListNode(int val, ListNode next) {
		this.val = val;
		this.next = next;
	}
}

class Solution {
	public ListNode reverseKGroup(ListNode head, int k) {
		if (head == null) {
			return null;
		}
		ListNode a = head, b = head;

		for (int i = 0; i < k; i++) {
			if (b == null) {
				return a;
			}
			b = b.next;
		}

		ListNode newHead = reverse(a, b);

		a.next = reverseKGroup(b, k);
		return newHead;
	}

	public ListNode reverse(ListNode a, ListNode b) {
		ListNode pre, cur, nxt;
		pre = null;
		cur = a;
		nxt = a;
		while (nxt != b) {
			__________________;
		}
		return pre;
	}
}
```

## template

```java

public class ListNode {
	int val;
	ListNode next;

	ListNode() {
	}

	ListNode(int val) {
		this.val = val;
	}

	ListNode(int val, ListNode next) {
		this.val = val;
		this.next = next;
	}
}

class Solution {
	public ListNode reverseKGroup(ListNode head, int k) {
		if (head == null) {
			return null;
		}
		ListNode a = head, b = head;

		for (int i = 0; i < k; i++) {
			if (b == null) {
				return a;
			}
			b = b.next;
		}

		ListNode newHead = reverse(a, b);

		a.next = reverseKGroup(b, k);
		return newHead;
	}

	public ListNode reverse(ListNode a, ListNode b) {
		ListNode pre, cur, nxt;
		pre = null;
		cur = a;
		nxt = a;
		while (nxt != b) {
			nxt = cur.next;
			cur.next = pre;
			pre = cur;
			cur = nxt;
		}
		return pre;
	}
}
```

## 答案

```java
nxt = cur.next;
cur.next = pre;
pre = cur;
cur = nxt;
```

## 选项

### A

```java
cur.next = pre;
nxt = cur.next;
pre = cur;
cur = nxt;
```

### B

```java
cur.next = pre;
nxt = cur.next;
cur = nxt;
pre = cur;
```

### C

```java
nxt = cur.next;
cur.next = pre;
cur = nxt;
pre = cur;
```