• 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->NULLm = 2 and n = 4,

    return 1->4->3->2->5->NULL.

    Note:
    Given mn satisfy the following condition:
    1 ≤ m ≤ n ≤ length of list.

    含义:翻转列表中给定的两个节点间的所有节点

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

     1         if(head == null)return null;
     2         ListNode dummy = new ListNode(0);
     3         dummy.next = head;
     4         ListNode preNode = dummy;
     5         int i=1;
     6         while(preNode.next!=null && i<m)
     7         {
     8             preNode = preNode.next;
     9             i++;
    10         }
    11         if(i<m) return head;
    12         ListNode mNode = preNode.next;
    13         ListNode cur = mNode.next;
    14         while(cur!=null && i<n)
    15         {
    16             ListNode next = cur.next;
    17             cur.next = preNode.next;
    18             preNode.next = cur;
    19             mNode.next = next;
    20             cur = next;
    21             i++;
    22         }
    23         return dummy.next;

    类似题目:206. Reverse Linked List

  • 相关阅读:
    05:背景设置
    04:文本 + 字体
    03:CSS三大特性
    02:Emmet 语法 + Ps切图
    01:基本概念 + 引入CSS
    input禁止输入的方法
    十进制转换成任意进制(栈的应用)
    假定一个解并判断是否可行(二分搜索应用)
    关于二分查找和二分搜索
    统计单词
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7729183.html
Copyright © 2020-2023  润新知