一、题目
![](https://i-blog.csdnimg.cn/blog_migrate/acdd3fcb648d48974af1a6de112cc1fb.png)
二、代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
private ListNode successor = null; // 后继节点
ListNode reverseBetween(ListNode head, int m, int n) {
if (m == 1) {
return reverseN(head, n);
}
head.next = reverseBetween(head.next, m - 1, n - 1);
return head;
}
// 反转以 head 为起点的 n 个节点,返回新的头结点
ListNode reverseN(ListNode head, int n) {
if (n == 1) {
// 记录第 n + 1 个节点
successor = head.next;
return head;
}
ListNode newHead = reverseN(head.next, n - 1);
head.next.next = head;
head.next = successor;
return newHead;
}
}