K 个一组翻转链表
ListNode结构如下
public static 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) {
ListNode a = head, b = head;
//反转k个,如果没有k个,则不反转
for (int i=0; i<k; i++){
if (b == null) return head;
b = b.next;
}
ListNode newList = reverse(a, b);
a.next = reverseKGroup(b, k);
return newList;
}
//反转a-b之间的节点
public ListNode reverse(ListNode a, ListNode b){
ListNode next, pre = null;
while(a != b){
next = a.next;
a.next = pre;
pre = a;
a = next;
}
return pre;
}
}