首先根据参数m找到反转区间的开始节点start和开始节点的前一个节点preStart,然后在在这个区间中进行反转。(图示帮助理解)
反转的思路是依次让后面的节点转换到区间的前面,循环n-m次后,指定区间内的链表反转完成。
代码如下:(画图有助于理解)
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(head==nullptr||head->next==nullptr) return head;
ListNode* newhead=new ListNode(-1);
newhead->next=head;
ListNode* start=head;
ListNode* preStart=newhead;
for(int i=1;i<m;i++)
{
preStart=start;
start=start->next;
}