题解 | #链表内指定区间反转#
链表内指定区间反转
http://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
ListNode* reverseBetween(ListNode* head, int m, int n) {
// write code here
if(m >= n || n <= 1){
cout<<"1\n";
return head;
}
if(m > 1){
//cout<<"A\n------------------\n";
ListNode * leftHead = head;
ListNode * temp = head;
ListNode * leftTail = nullptr;
int i = 1;
while(temp && i++ < m){
//cout<<"Aaaa\n------------------\n";
leftTail = temp;
temp = temp->next;
}
ListNode * tempHead = nullptr;
ListNode * tempTail = nullptr;
ListNode * midTail = temp;
while(temp && m++ <= n){
//cout<<"Abbb\n------------------\n";
tempHead = temp;
temp = temp->next;
tempHead->next = tempTail;
tempTail = tempHead;
}
leftTail->next = tempTail;
midTail->next = temp;
return leftHead;
}
else if(m == 1){
//cout<<"B\n------------------\n";
ListNode * leftHead = nullptr;
ListNode * temp = head;
ListNode * leftTail = nullptr;
ListNode * newTail = temp;
while(temp && m++ <= n){
leftHead = temp;
temp = temp->next;
leftHead->next = leftTail;
leftTail = leftHead;
}
newTail->next = temp;
return leftHead;
}
else{
//cout<<"C\n------------------\n";
return nullptr;
}
return nullptr;
}
};