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

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

Note:
Given m, n satisfy the following condition:
1 ≤ mn ≤ 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* reverseList(ListNode* head,int length){
        if(length==1)return head;
        ListNode *a=head,*b=NULL,*c;
        
        int count=1;
        while(a!=NULL){
          c=a->next;
          a->next=b;
          b=a;
          a=c;
          count++;
          if(count==length)break;
        }
        head->next=a->next;
        a->next=b;
        return a;
    }
    ListNode *reverseBetween(ListNode *head, int m, int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(m==1){
            return reverseList(head,n-m+1);
        }
        else{
            ListNode* temp=head;
            for(int i=1;i<m-1;i++){
                temp=temp->next;
            }
            temp->next=reverseList(temp->next,n-m+1);
            return head;
        }
    }
};
原文地址:https://www.cnblogs.com/superzrx/p/3332005.html