lintcode 36 Reverse Linked List II

题目描述

Description
Reverse a linked list from position m to n.

  • Given m, n satisfy the following condition: 1 ≤ m ≤ n ≤ length of list.

Example
Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL.

Challenge
Reverse it in-place and in one-pass

思路

之前写过链表翻转,是翻转整个链表的,当然这里改了一部分,只不过只需要加几步就行了。

  1. 找到开始翻转的节点,然后开始断开链表,形成两个链表,一个是翻转位置前面的链表,一个是翻转位置开始的链表。
  2. 链表翻转,不过这里跟之前有点不同,我是采用,将每个节点依次断开,插入到前面的链表的最后一个位置中。
  3. 找到翻转后的最后节点,进行拼接。

感觉这个思路说着可能不好理解
在这里插入图片描述
链表:1->2->3->4->5->6->7->null m:3   n:6
得到的链表应该是:1->2->6->5->4->3->7->null
下面是步骤

  1. 1->2->null, 3->4->5->6->7->null
  2. 1->2->3->null, 4->5->6->7->null
  3. 1->2->4->3->null, 5->6->7->null
  4. 1->2->5->4->3->null, 6->7->null
  5. 1->2->6->5->4->3->null, 7->null
  6. 1->2->6->5->4->3->7->null

这样比较容易理解了吧

代码

public ListNode reverseBetween(ListNode head, int m, int n) {
        // write your code here
        /*
        新建一个链表result,用链表next节点表示head初始头结点,head再等于result,
        避免m = 1时不进行反转。
        */
        ListNode result = new ListNode(0);
        result.next = head;
        head = result;
        /*
        找到第一个开始翻转的节点
         */
        while (m > 1) {
            head = head.next;
            m--;
            n--;
        }
        ListNode start = head.next;
        ListNode temp;
        head.next = null;
        /*
        开始翻转
         */
        while (n > 0) {
            temp = start;
            start = start.next;
            temp.next = head.next;
            head.next = temp;
            n--;
        }
        /*
        找到第一个链表最后一个节点,并进行连接
         */
        while (head.next != null) {
            head = head.next;
        }
        head.next = start;
        return result.next;
    }
内容概要:本文档提供了三种神经网络控制器(NNPC、MRC和NARMA-L2)在机器人手臂模型上性能比较的MATLAB实现代码及详细解释。首先初始化工作空间并设定仿真参数,包括仿真时间和采样时间等。接着定义了机器人手臂的二阶动力学模型参数,并将其转换为离散时间系统。对于参考信号,可以选择方波或正弦波形式。然后分别实现了三种控制器的具体算法:MRC通过定义参考模型参数并训练神经网络来实现控制;NNPC利用预测模型神经网络并结合优化算法求解控制序列;NARMA-L2则通过两个神经网络分别建模f和g函数,进而实现控制律。最后,对三种控制器进行了性能比较,包括计算均方根误差、最大误差、调节时间等指标,并绘制了响应曲线和跟踪误差曲线。此外,还强调了机器人手臂模型参数的一致性和参考信号设置的规范性,提出了常见问题的解决方案以及性能比较的标准化方法。 适合人群:具备一定编程基础,特别是熟悉MATLAB编程语言的研究人员或工程师,以及对神经网络控制理论有一定了解的技术人员。 使用场景及目标:①理解不同类型的神经网络控制器的工作原理;②掌握在MATLAB中实现这些控制器的方法;③学会如何设置合理的参考信号并保证模型参数的一致性;④能够根据具体的性能指标对比不同控制器的效果,从而选择最适合应用场景的控制器。 其他说明:本文档不仅提供了完整的实验代码,还对每个步骤进行了详细的注释,有助于读者更好地理解每段代码的功能。同时,针对可能出现的问题给出了相应的解决办法,确保实验结果的有效性和可靠性。为了使性能比较更加公平合理,文档还介绍了标准化的测试流程和评估标准,这对于进一步研究和应用具有重要的指导意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值