题意:
方法:
模拟
思路:模拟。
首先,要获取反转区间的前一个节点 r ,因此需要新增一个头结点(防止区间范围从1开始);
然后,遍历区间实现反转效果;
最后,拼接链表。
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(head==nullptr)
return head;
ListNode *h=new ListNode(0);
h->next=head;//加个头结点
ListNode *r=h,*s,*p,*q,*t;//初始化
int cnt=n-m;
m--;
while(m--){//r指向区间的前一个节点
r=r->next;
}
//反转区间初始化
s=r->next;
p=r->next;
q=p->next;
while(cnt--){//循环反转区间
t=q->next;
q->next=p;
p=q;
q=t;
}
r->next=p;//拼接
s->next=q;
return h->next;
}
};
时间复杂度:
空间复杂度:![]()



京公网安备 11010502036488号