/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverse(ListNode* start, ListNode* end) {
if (start==NULL||end==NULL||start==end) {
return start;
}
ListNode* p1=NULL;
ListNode* p2=start;
//ListNode* p3=start->next;
while(p2->next!=end->next) {
ListNode* p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
p2->next=p1;
return end;
}
ListNode *reverseBetween(ListNode *head, int m, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (m>=n) {
return head;
}
int i=0;
ListNode* start=head;
ListNode* pstart=NULL;
while(start&&i<m-1) {
i++;
pstart=start;
start=start->next;
}
if (start==NULL) {
return head;
}
i=0;
ListNode* end=head;
ListNode* pend=NULL;
while(end&&i<n-1) {
i++;
end=end->next;
}
if (end!=NULL)
pend=end->next;
reverse(start, end);
start->next=pend;
if (pstart) {
pstart->next=end;
} else {
return end;
}
return head;
}
};
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverse(ListNode* start, ListNode* end) {
if (start==NULL||end==NULL||start==end) {
return start;
}
ListNode* p1=NULL;
ListNode* p2=start;
//ListNode* p3=start->next;
while(p2->next!=end->next) {
ListNode* p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
p2->next=p1;
return end;
}
ListNode *reverseBetween(ListNode *head, int m, int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (m>=n) {
return head;
}
int i=0;
ListNode* start=head;
ListNode* pstart=NULL;
while(start&&i<m-1) {
i++;
pstart=start;
start=start->next;
}
if (start==NULL) {
return head;
}
i=0;
ListNode* end=head;
ListNode* pend=NULL;
while(end&&i<n-1) {
i++;
end=end->next;
}
if (end!=NULL)
pend=end->next;
reverse(start, end);
start->next=pend;
if (pstart) {
pstart->next=end;
} else {
return end;
}
return head;
}
};