题意比较明晰,代码逻辑也比较清晰,思路就是,标记第m个节点,同时将m到n的节点的值入栈,进行反转节点
代码如下
/**
* 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) {
/*
思路:标记坐标m指向的节点,借助栈将m到n之间的节点反转
Time Complexity:O(n)
Space Complexity:O(m-n)
*/
if(!head || !head->next)return head;
ListNode* ret=head;
ListNode* start=NULL;
stack<int>sta;
int i=1;
while(i<=n){
if(i<m){
head=head->next;
i++;
continue;
}
if(i==m){
start=head;
sta.push(head->val);
head=head->next;
i++;
continue;
}
if(i<n){
sta.push(head->val);
head=head->next;
i++;
continue;
}
if(i==n){
sta.push(head->val);
break;
}
}
while(!sta.empty()){
start->val=sta.top();
sta.pop();
start=start->next;
}
return ret;
}
};