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