题目:k个一组翻转链表
思路:递归
递归函数返回已经反转好的链表;
递归函数需要把本次翻转好的链表 链到 下一次翻转好的链表上。
代码:
/**
* Definition for singly-linked list.
* 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 || head.next == null) {
return head;
}
ListNode last = head;
for (int i = 0; i < k - 1; i ++) {
last = last.next;
if (last == null) {
return head;
}
}
ListNode nextHead = last.next;
last.next = null;
ListNode root = reverse(head);
// reverse后,head变成了最后一个节点
head.next = reverseKGroup(nextHead, k);
return root;
}
public ListNode reverse (ListNode head) {
if(head == null || head.next == null) {
return head;
}
ListNode node = reverse(head.next);
head.next.next = head;
head.next = null;
return node;
}
}