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

链表内指定区间反转

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

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @param m int整型 
     * @param n int整型 
     * @return ListNode类
     */
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
        ListNode*res=head;
        if(head==NULL||head->next==NULL)
            return head;
        //首先找到四个节点,m的前一个节点,m节点,n节点,n的后一个节点
        ListNode* front=NULL,*rear=NULL,*start=NULL,*end=NULL;
        int count=1;
        while(head){
            if(count==m-1){//找到了m之前的一个节点
                front=head;
            }
             if(count==m){//找到了m节点
                start=head;
            }
             if(count==n){
                end=head;
                if(head->next!=NULL)
                    rear=head->next;
                //否则直接break
                else break;
            }
            count++;
            head=head->next;
        }
        //循环结束之后四个节点的位置就全都找到了,如果front和rear没找到就是空也是对的
        end->next=NULL;//把end节点的next置为空,便于反转链表
        //接下来就是反转一个链表的固定套路
        ListNode* tmp=NULL;
        ListNode*pre=start;//先把start的值记录下来
        ListNode*qre=start->next;
        while(qre){
            start->next=tmp;
            tmp=start;
            start=qre;
            qre=start->next;
        }
        start->next=tmp;
        //现在start就是反转之后的链表的头,而现在链表的尾其实就是之前存下来的start的值
        pre->next=rear;//先将链表的后半部分连接起来,没有任何问题
        //但是链表的前半部分连接时有问题,要判断front是否为空
        if(!front)//front为空前半部分无法连接,直接返回start即可
        {
            return start;
        }
        else{
            front->next=start;
            return res;
        }
    }
    
};
全部评论

相关推荐

在瑞幸干两年,奥特曼都得闪灯
投递瑞幸咖啡(中国)有限公司等公司7个岗位 >
点赞 评论 收藏
分享
05-26 16:13
门头沟学院 C++
牢大肘击Java:海投就完事了bro,就当刷视频了
点赞 评论 收藏
分享
湫湫湫不会java:为啥25届才17,个人信息没打码哦
点赞 评论 收藏
分享
家人们,我现在真的好纠结。我是26届的,目前还没有实习过。我现在的情况是,想参加秋招,但是感觉自己的简历特别空,没有实习经历会不会秋招直接凉凉啊?可我又听说现在很多公司对26届实习生也不太感冒,说什么不确定性大。而且我最近在准备考公,时间上也有点冲突。要是把时间花在实习上,备考时间就少了。但要是不实习,又怕以后就业有问题😫有没有懂行的友友帮我分析分析:26届现在不实习,秋招找工作真的会很难吗?考公和实习该怎么平衡啊?如果现在不实习,考完公再去找实习还来得及吗?真的太焦虑了,希望大家能给我点建议🙏
小破站_程序员YT:我可能和大家的观点不一样。人的精力是有限的,不能既要还要。你又想实习又想考公最后又要秋招上岸,我觉得哪有那么多的选择。你如果想考上岸,那就全力以赴。如果想秋招上岸,就继续投实习,投没了,就继续准备秋招,秋招不行继续春招。别到最后,考公没上岸,觉得是花了时间浪费在找实习上了, 秋招没上岸,觉得是浪费时间准备考公去了。我是认为很难说可以去平衡 不喜勿喷,可以叫我删除
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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