NO.92 reverse list II

Reversed from the position m to n list. Please use the trip to the scan is complete reversal.

Description:
. 1 ≤  m  ≤  n-  ≤ chain length.

Example:

Input: l-> 2-> 3-> 4-> 5-> NULL, m = 2, n- =. 4
 Output: l-> 4-> 3-> 2-> 5-> NULL
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* reverseBetween(struct ListNode* head, int m, int n){
    assert(m<=n);
    struct ListNode* search=head;
    struct ListNode* reverse_start=NULL;
    struct ListNode* reverse_end=NULL;
    struct ListNode* reverse_tmp=NULL;
    struct ListNode* save=NULL;
    int count=0;
    while(search&&count<=n-1)
    {
        count++;
        if(count==m-1)
        {
            reverse_start=search;
        }
        save=search;
        search=search->next;
        if(count==m)
        {
            reverse_tmp=save;
            reverse_end=save;
            reverse_end->next=NULL;
            reverse_tmp->next=NULL;
        }
        else
        {
            if(reverse_tmp)
            {
                save->next=reverse_tmp;
                reverse_tmp=save;
            }
        }
    }
    if(reverse_start)
    {
        reverse_start->next=reverse_tmp;
    }
    else
    {
        head=reverse_tmp;
    }
    reverse_end->next=search;
    return head;
}

When execution: 0 ms, defeated 100.00% of users in Reverse Linked List II of C submission

Memory consumption: 7.1 MB, defeated 82.08% of users in Reverse Linked List II of C submission

Guess you like

Origin blog.csdn.net/xuyuanwang19931014/article/details/91038936