zoukankan      html  css  js  c++  java
  • 92.反转链表II

    题目

    给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。
     
    示例 1:

    输入:head = [1,2,3,4,5], left = 2, right = 4
    输出:[1,4,3,2,5]

    示例 2:

    输入:head = [5], left = 1, right = 1
    输出:[5]
     
    提示:
    链表中节点数目为 n
    1 <= n <= 500
    -500 <= Node.val <= 500
    1 <= left <= right <= n

    代码

    和反转整个链表不同的是:
    (1)需要记录反转区域的前一个节点ll。记反转区域的头节点为head,最后只要ll.next=head连接前后两部分即可。因为有可能从第一个节点就开始反转,所以引入哑元dummy。
    (2)控制反转次数,反转到right位置结束。使用for循环即可。

      public ListNode reverseBetween(ListNode head, int left, int right) {
            //ll为第left-1个节点
            ListNode dummy=new ListNode(),ll=dummy;
            dummy.next=head;
            for(int i=1;i<left;++i) ll=ll.next;
            //反转[left,right]区域
            head=ll.next;
            ListNode pre=head,cur=head.next;
            for(int i=left;i<right;++i){
                pre.next=cur.next;
                cur.next=head;
                head=cur;
                cur=pre.next;
            }
            //和前面的部分接上
            ll.next=head;
            return dummy.next;
      }
    

    leetcode原题:92.反转链表II

  • 相关阅读:
    误卸载python2.4导致yum不能用后的修复
    网卡流量查看软件bmon
    DTD约束
    Schema约束
    SAX解析原理示意
    DOM解析原理示意
    XML中文乱码问题
    Web应用的目录结构
    手动+工具开发动态资源
    Tomcat服务器的下载及安装
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/14671065.html
Copyright © 2011-2022 走看看