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.
来源: https://leetcode.com/problems/reverse-linked-list-ii/#/description #include<string> #include <vector> using namespace std; // Definition for a binary tree node. //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) { if (m == n) { return head; } int iReverse = n - m+1 ; ListNode *resNode = new ListNode(0); resNode->next = head; ListNode* curNode = resNode; while (--m) { curNode = curNode->next; } ListNode* m1Node = curNode;//(m-1)位置的节点指针 ListNode* mNode = curNode->next;//m节点的指针 curNode = mNode->next;//(m+1)节点的指针 int te = 0; ListNode* temp = mNode; while (--iReverse) { ListNode* nextNode = curNode->next; curNode->next = temp; temp = curNode; curNode = nextNode; } m1Node->next = temp; mNode->next = curNode; return resNode->next; } };