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

链表内指定区间反转

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

唯一一次超过100%用户
ListNode* reverseBetween(ListNode* head, int m, int n) {
        // write code here
        int  i = 1;
        ListNode *p = head, *q = nullptr, *pHead = nullptr, *pre = nullptr;
        if(m == n)
            return head;
        while(i < m) { // 记录第m个数字的前一个节点的位置,如果m== 1,pre就是个空
            pre  = p;
            p = p->next;
            i++;
        }
        for(i = m; i <= n; i++) { // 构造个新的链表
            if ( i == m) {
                pHead = new ListNode(p->val);
                q = pHead; // 新链表最后一个节点的位置
            } else {
                ListNode *temp = new ListNode(p->val);
                temp->next = pHead;
                pHead = temp; // 新链表第一个节点的位置
            }
            p = p->next;
        }
        // 两个链表进行拼接
        if (m == 1) // 这里特别注意,不进行判断的端的pre就会是个空,没有输出
            head = pHead;
        else 
            pre->next = pHead;
        q->next = p;
        return head;
    }

全部评论

相关推荐

02-02 20:25
门头沟学院 Java
数学转码崽:八股文也算是前人总结的精华,但是因为全是结果导向,你光背不去理解它背后的深层原理和这样做的原因,反而忽略了程序员最该重视的过程导向。推荐你不会的就去多问ai,比如我当时背的时候,concurrenthashmap底层原理常见八股网站都会讲,但是我不理解为什么它去用synchronize锁节点,为什么不用reentrantlock去锁节点。面试官问我你为什么觉得synchronize在这个场景下性能更好呢?虽然面试官可能也不确定清楚,但是你可以尝试给他解答,让他看见你的思考,这才是最重要的,毕竟你没实习,你的项目你也无法证明是你自己思考的产物,那就在别的地方体现你的能力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务