92.反转链表II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
- 注意链表从第一位就开始反转的情况,要把start结点定义为一个空结点。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int m, int n) {
if(m == n) return head;
ListNode *p = head,*q,*s,*start,*end;
int tmpm = m,tmpn = n;
while(tmpm-2 > 0){
p = p->next;
tmpm--;
}
if(m == 1){
start = new ListNode();
end = p;
q = p->next;
p->next = NULL;
}
else{
start = p;
p = p->next;
q = p->next;
p->next = NULL;
end = p;
}
while(tmpn-m > 0 && q){
s = q->next;;
q->next = p;
p = q;
q = s;
tmpn--;
}
end->next = q;
start->next = p;
if(m == 1) return start->next;
return head;
}
};
通过时间: