【力扣每日一题】92. 反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
class Solution {
public:
ListNode *reverseP(ListNode *head,ListNode *tail){//头尾指针区间反转
if(head==tail||head->next==tail)return head;
ListNode *r,*q;
q=tail;
while(head!=tail){
r=head->next;
head->next=q;
q=head;
head=r;
}
return q;
}
ListNode* reverseBetween(ListNode* head, int left, int right) {
ListNode *dim=new ListNode(0,head);
ListNode *p=dim;
ListNode *start ,*end;
for(int i=0;i<=right;i++){ //找头尾指针
if(i==left-1)start=p;
p=p->next;
}
end=p;
start->next=reverseP(start->next,end);
return dim->next;
}
};