# Description

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

The original problem is here.

The original code is here.

# My Solution

I solve this problem in C++, as below:

``````/*
*Author: shuaijiang
*Email: zhaoshuaijiang8@gmail.com
*/
#include<iostream>
#include<vector>
#include<stdlib.h>
using namespace std;

/**
* 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 NULL;
if(m==n)

ListNode * lastNode, *currNode, *nextNode, *node;
if(n<=1)

for(int i=1;i<n;i++){
node = node->next;
}
nextNode = node->next;

if(m==1){
}
else{
for(int i=2;i<m;i++){
lastNode = lastNode->next;
currNode = currNode->next;
}
currNode->next = nextNode;
}
}
stack<ListNode*> myStack;
myStack.push(node);
for(int i=1;i<k;i++){
node = node->next;
myStack.push(node);
}
myStack.pop();
while(!myStack.empty()){
nextNode = myStack.top();
myStack.pop();
node->next = nextNode;
node = node->next;
}