https://leetcode.com/problems/reverse-linked-list-ii/
难度还好,和之前的反转链表没本质区别,把头尾拆出来即可
关于stack存储,和汪童鞋中午吃饭讨论说起来 存listnode肯定更好一些
Reverse a linked list from position m to n. Do it in one-pass.
Note: 1 ≤ m ≤ n ≤ length of list.
Example:
Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NULL
/**
* 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) {
stack<ListNode*>s;
ListNode* head0 = new ListNode(0);
head0->next = head;
ListNode* pLeft = head0;
ListNode* pRight = head0;
for(int i = 1; i < m ;i++) {//[1,2)
pLeft = pLeft->next;//1
pRight = pRight->next;//1
}
for(int i = m;i <= n ;i++){//[2,4]
pRight = pRight->next;//2-3-4
s.push(pRight);
// printf("val= %d\n",pRight->val);
}
pRight = pRight->next;
while(!s.empty()) {
pLeft ->next = s.top();
s.pop();
pLeft = pLeft->next;
}
pLeft->next = pRight;
return head0->next;
}
};