zoukankan      html  css  js  c++  java
  • 92. Reverse Linked List II

    Reverse a linked list from position m to n. Do it in-place and in one-pass.
    
    For example:
    Given 1->2->3->4->5->NULL, m = 2 and n = 4,
    
    return 1->4->3->2->5->NULL.
    
    Note:
    Given m, n satisfy the following condition:
    1 ? m ? n ? length of list.

    这道题是比较常见的链表反转操作,不过不是反转整个链表,而是从m到n的一部分。分为两个步骤,第一步是找到m结点所在位置,第二步就是进行反转直到n结点。反转的方法就是每读到一个结点,把它插入到m结点前面位置,然后m结点接到读到结点的下一个。总共只需要一次扫描,所以时间是O(n),只需要几个辅助指针,空间是O(1)。代码如下: 

    1.reverse 需要这么几个节点:

    第一段尾节点(m的前一个节点), 第二段首节点(初始化为第二段第一个节点)、第二段遍历的节点(初始化为第二段第二个节点)-->作为第三段的首

       mid                                   tail                                                                  mpointer  

    节点、第二段尾节点(即第二段第一个节点)   ----npointer

    2.dummyNode + m的前一个节点

    public ListNode reverseBetween(ListNode head, int m, int n) {
            ListNode prev = new ListNode(-1);
            prev.next = head;
            ListNode mpointer = prev; //point to m-1 position
            ListNode npointer = prev; //point to n position
            int index = 1;
            while (index < m) {
                mpointer = mpointer.next;
                index++;
            }
           
            ListNode mid = mpointer;
            ListNode tail = mpointer.next;
            npointer = tail;
            mpointer = tail.next;
            //ListNode midHead = tail.next;
            while  (m < n) {
                ListNode temp = mpointer.next;
                mpointer.next = tail;
                tail = mpointer; 
                mpointer =  temp;
                m++;            
            }
            mid.next = tail;
            npointer.next =  mpointer;
            return prev.next;     
        }
    

      

  • 相关阅读:
    Android UI之LinearLayout详解
    在zxing开源项目里,camera.setDisplayOrientation(90)出现错误
    DjangoORM获取值的不同类型
    DjangoORM操作数据库
    Django的URL写法
    创建django项目的基础命令&知识(一)
    python读取EXCEL的某一列,并保存到txt文本中
    后台管理页面基础布局HTML+CSS
    使用yaml格式进行接口测试报错
    常见的sql语句练习
  • 原文地址:https://www.cnblogs.com/apanda009/p/7299696.html
Copyright © 2011-2022 走看看