题解 | #链表内指定区间反转#

链表内指定区间反转

https://www.nowcoder.com/practice/b58434e200a648c589ca2063f1faf58c

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @param m int整型 
 * @param n int整型 
 * @return ListNode类
 */

 typedef struct ListNode* Listlink;

 Listlink reverseList(Listlink L);
 Listlink reverse(Listlink pre,Listlink cru);
 int NumList(Listlink L);

struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
    // write code here
    if(m==1&&n==1)
        return head;
    Listlink start,end;     //start与end节点均保持在不翻转的链表中
    Listlink h,e;           //h,e分别为反转部分的头尾

    int num=NumList(head);

    if(m==1&&n==num){
        head=reverseList(head);
        return head;
    }

    int i;
    start=head;
    e=head;

    //首先,找到链表的m-1个元素
    for(i=1;i<m-1;i++){
        start=start->next;
    }
    //找到链表的第n个元素
    for(i=1;i<n;i++){
        e=e->next;
    }

    //标记反转部分的起点、终点
    //将不反转的部分分离出去
    end=e->next;
    e->next=NULL;
    //处理开始部分的特殊情况
    if(m==1)
        h=start;
    else{
        h=start->next;
        start->next=end;
    }
        
    

    e=reverseList(h);   //反转后,反转部分的最后一个节点成为反转部分的头结点

    if(m==1){
        head=e;
        h->next=end;
        return head;
    }
    start->next=e;
    h->next=end;
    return head;
}
Listlink reverseList(Listlink L){
    if(L==NULL||L->next==NULL)
        return L;
    
    L=reverse(NULL,L);
    return L;

}

Listlink reverse(Listlink pre,Listlink cru){
    if(cru==NULL)
        return pre;

    Listlink temp;
    temp=cru->next;
    cru->next=pre;
    return reverse(cru,temp);
}

int NumList(Listlink L){
    int cot=0;
    Listlink p=L;
    if(L==NULL)
        return cot;
    while(p){
        p=p->next;
        cot++;
    }
    return cot;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-29 14:13
点赞 评论 收藏
分享
都送什么礼物吗?如果送的话,价格大概都是多少?辛苦大家给个参考啦!
牛客73617529...:要送就送那种没必要买又很贵的,假设一个打瓦的显示屏 鼠标 键盘都很贵,你送这些突出不了价值,直接送一个很贵的鼠标垫包记住你的。
点赞 评论 收藏
分享
07-19 13:28
长沙学院 Java
鸿哥鸿哥:学院(一本),感觉在脱ku子放屁,学院结尾的除了那几家出名的,一律按二本处理
点赞 评论 收藏
分享
07-28 16:37
门头沟学院 Java
哎,继续加油吧
ResourceUt...:能接到面试就已经是✌🏻了
腾讯一面2195人在聊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务