题解 | #调整牛群顺序#

调整牛群顺序

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

知识点:

链表/寻找倒数第n个节点

分析:

首先找出倒数第 n 个结点,使用快慢指针方法。

由于我们需要找到倒数第 n个节点,因此我们可以使用两个指针同时对链表进行遍历,并且end比 prev超前 n个节点。当 end遍历到链表的末尾时,prev就恰好处于倒数第 n个节点。

具体地,初始时 end和 prev均指向头节点。我们首先使用 end对链表进行遍历,遍历的次数为 n。此时,end和prev之间间隔了 n−1 个节点,即end比prev超前了 n个节点。

在这之后,我们同时使用end和prev对链表进行遍历。当 end 遍历到链表的末尾(即 end为空指针)时,prev恰好指向倒数第 n个节点。

编程语言:

C++

完整代码:

    ListNode* moveNthToEnd(ListNode* head, int n) {
        // write code here
        if (n == 1) return head;
        ListNode* dummy = new ListNode(0);
        dummy->next = head;
        ListNode* cur = head;
        ListNode* prev = dummy,
                  * end = dummy;

        for (int i = 0; i < n; ++i) {
            end = end->next;
        }
        while (end->next) {
            prev = prev->next;
            end = end->next;
        }
        cur = prev->next;
        prev->next = cur->next;
        end->next = cur;
        cur->next = nullptr;
        return dummy->next;
    }

全部评论

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
2024-12-27 23:45
已编辑
三江学院 Java
程序员牛肉:死局。学历+无实习+项目比较简单一点。基本就代表失业了。 尤其是项目,功能点实在是太假了。而且提问点也很少。第一个项目中的使用jwt和threadlocal也可以作为亮点写出来嘛?第二个项目中的“后端使用restful风格”,“前端采用vue.JS”,“使用redis”也可以作为亮点嘛? 项目实在是太简单了,基本就是1+1=2的水平。而你目标投递的肯定也是小厂,可小厂哪里有什么培养制度,由于成本的问题,人家更希望你来能直接干活,所以你投小厂也很难投。基本就是死局,也不一定非要走后端这条路。可以再学一学后端之后走测试或者前端。 除此之外,不要相信任何付费改简历的。你这份简历没有改的必要了,先沉淀沉淀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务