本题思路是先定义区间时,找到区间的前一个结点并记录,然后在需要翻转的区间中,执行翻转程序,
程序思路:逐步翻转,一次翻转两个指针的指向,翻转的次数是n-m次,可以画图理解
(提示:本代码可以选择是否加上对于NULL的判断,防止访问NULL的next,实际上n,m的大小应该就会限制这种情况,看个人喜好是否加上)
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    if(head==NULL||head->next==NULL)
    {
        return head;
    }
    else
    {
        struct ListNode* New=(struct ListNode*)malloc(sizeof(struct ListNode));
        New->next=head;//设置头结点是为了防止区域一开始就是第一个结点。
        struct ListNode* prev,*cur,*tail;
        prev=New;
        for(int i=0;i<m-1;i++)
        {
            prev=prev->next;//这里得到交换区域前一个结点。            
        }
        cur=prev->next;//将交换区的第一个结点给cur。
        for(int j=0;j<n-m;j++)
        {
            tail=cur->next;
            cur->next=tail->next;
            tail->next=prev->next;
            prev->next=tail;
        }
        return New->next;//返回New的next,因为New中多分配了一个结点,会导致输出有误。
    }
}