首页 > 代码库 > Reverse Linked List II

Reverse Linked List II

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->NULLm = 2 and n = 4,

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

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

/** * 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) {        ListNode* newHead = new ListNode(-1);        newHead->next = head;        ListNode* p = newHead;        n = n - m + 1;        while(--m){            p = p->next;        }        ListNode* cur = p->next;        ListNode* ptail = cur;        while (n--) {            ListNode* pNext = p->next;            ListNode* curNext = cur->next;            p->next = cur;            cur->next = pNext;            cur = curNext;            ptail->next = curNext;        }        return newHead->next;    }};

 

Reverse Linked List II