题意:
方法:
模拟
思路:模拟。
首先,要获取反转区间的前一个节点 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; } };
时间复杂度:空间复杂度: