题解 | #链表内指定区间反转#
链表内指定区间反转
https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
思路
- 翻转指定区间的元素-就相当于从第m个结点开始翻转n-m个结点
- 使用递归的思想到达第m个结点
翻转以m结点开始的n-m个结点
翻转链表的前n个结点
1·递归的边界是-目前链表中只剩下一个元素
2·当目前区间只有一个元素的时候-记录它的下一个结点succenor
3·让当前头结点的next->next指向头
4·让头的next指向succenor
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ class Solution { public: /** * * @param head ListNode类 * @param m int整型 * @param n int整型 * @return ListNode类 */ ListNode* reverseBetween(ListNode* head, int m, int n) { // write code here if(m==1){ return reverse(head,n); } // head->next=reverseBetween(head->next, m-1, n-1); return head; } //翻转链表的前n个结点 ListNode *successor=nullptr;//后驱结点 ListNode *reverse(ListNode *head,int n){ if(n==1){ successor=head->next; return head; } ListNode *last=reverse(head->next, n-1); head->next->next=head; head->next=successor; return last; } };