题解 | #链表内指定区间反转#
链表内指定区间反转
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;
}
};
