Leetcode 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.

ListNode *reverseBetween(ListNode *head, int m, int n) {
    ListNode *newHead = new ListNode(-1);
    newHead->next = head;
    ListNode *p = head, *pre = newHead;
    int cnt = 0;
    while(cnt < m-1) {pre = p;p=p->next;cnt++;}
    ListNode *q = p;
    p=p->next;cnt++;
    while(cnt< n){
        ListNode *node = p->next;
        p->next=pre->next;
        pre->next = p;
        p = node;
        q->next = node;
        cnt++;
    }
    return newHead->next;
}

 

posted @ 2014-06-23 17:16  OpenSoucre  阅读(134)  评论(0编辑  收藏  举报