Leetcode -- Rotate List

本文详细阐述了链表右旋转算法的两种实现方法:首尾相连法和切段法,包括边界条件处理和代码实现。

https://oj.leetcode.com/problems/rotate-list/


Given a list, rotate the list to the right by k places, where k is non-negative.

For example:
Given 1->2->3->4->5->NULL and k = 2,
return 4->5->1->2->3->NULL.


public ListNode rotateRight(ListNode head, int n)

这一题,根据题意,我们知道rotate表示的实际上是一种位移,k = 2的时候,链表向右位移两格,以循环的模式。

这一题其实有两种做法,第一种做法是首尾相连,例如例子里,将5.next 连到 1上,假设链表的长度是len, 那么实际上我们就是将头指针的位置,往后移动 len - k个,也就是1挪到了4,然后以4为首,往下找 len - 1次找到新的tail,断尾之。这是第一种做法。要注意的是,k的值是可以超越链表长度本身的。所以在我们获知链表的长度之后,首先要求余, k %= len 来保证k是不会超过链表长度。


第二种做法,不需要首尾相连,可以相当于,将链表本身切成两段,第一段长len - k, 第二段长度为k,然后从第一段-》第二段变成第二段-》第一段这样就可以了。

其实本题并不难,但是边界条件有点多,譬如空链表啦,譬如k刚好等于链表的长度啦。这都是很恶心的事情。

下面给出代码:

    public ListNode rotateRight(ListNode head, int n) {
        if(head == null)//第一个边界条件 -- 空指针
            return null;
        ListNode tmp = head;
        int length = 1;
        while(tmp.next != null){
            length++;
            tmp = tmp.next;
        }
        ListNode tail = tmp;
        n %= length;
        n = n == 0 ? 0 : length - n;
        tmp = null;
        while(n > 0){
            tmp = tmp == null ? head : tmp.next;// 这里其实涉及到第二个边界条件的处理方法,n = 链表长度,这样实际上就完全不需要位移了。
            n--;
        }
        if(tmp != null){//一旦 n = 链表长度,根据刚才的逻辑根本就不会跑进这里。
            ListNode res_head = tmp.next;
            tmp.next = null;
            tail.next = head;
            return res_head;
        }
        return head;//这也就是n = 链表长度才会进来的。返回元头指针即可。
    }


计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略研究(Matlab代码实现)内容概要:本文研究了计及风电并网运行的微电网及集群电动汽车综合需求侧响应的优化调度策略,并提供了基于Matlab的代码实现。研究聚焦于在高渗透率可再生能源接入背景下,如何协调微电网内部分布式电源、储能系统与大规模电动汽车充电负荷之间的互动关系,通过引入需求侧响应机制,建立多目标优化调度模型,实现系统运行成本最小化、可再生能源消纳最大化以及电网负荷曲线的削峰填谷。文中详细阐述了风电出力不确定性处理、电动汽车集群充放电行为建模、电价型与激励型需求响应机制设计以及优化求解算法的应用。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源、微电网、电动汽车等领域技术研发的工程师。; 使用场景及目标:①用于复现相关硕士论文研究成果,深入理解含高比例风电的微电网优化调度建模方法;②为开展电动汽车参与电网互动(V2G)、需求侧响应等课题提供仿真平台和技术参考;③适用于电力系统优化、能源互联网、综合能源系统等相关领域的教学与科研项目开发。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注模型构建逻辑与算法实现细节,同时可参考文档中提及的其他相关案例(如储能优化、负荷预测等),以拓宽研究视野并促进交叉创新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值