zoukankan      html  css  js  c++  java
  • 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.

    first 是第 m -1 个元素。 elementM是第m个元素。 后面将 cur -> second 变成 cur <- second。 最后 cur是第n个元素,second是第n + 1个元素。

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     public ListNode reverseBetween(ListNode head, int m, int n) {
    14         // Start typing your Java solution below
    15         // DO NOT write main() function
    16         ListNode header = new ListNode(-1);
    17         header.next = head;
    18         ListNode cur = header;
    19         ListNode first = null;
    20         ListNode elementM = null;
    21         ListNode second = null;
    22         int i = 0;
    23         while(i < m){
    24             first = cur;
    25             cur = cur.next;
    26             i ++;
    27         }
    28         elementM = cur;
    29         second = cur.next;
    30         while(i < n){
    31             ListNode tmp = second.next;
    32             second.next = cur;
    33             cur = second;
    34             second = tmp;
    35             i ++;
    36         }
    37         first.next = cur;
    38         if(elementM != null && elementM != second) elementM.next = second;
    39         return header.next;
    40     }
    41 }

    第三遍:

     1 public class Solution {
     2     public ListNode reverseBetween(ListNode head, int m, int n) {
     3         ListNode header = new ListNode(-1);
     4         header.next = head;
     5         ListNode first = header, second = header;
     6         for(int i = 1; i < m; i ++){
     7             first = first.next; 
     8         }
     9         ListNode cur = first.next;
    10         for(int i = 0; i < n; i ++){
    11             second = second.next;
    12         }
    13         ListNode end = second;
    14         second = second.next;
    15         end.next = null;
    16         while(cur != null){
    17             ListNode tmp = cur.next;
    18             cur.next = second;
    19             second = cur;
    20             cur = tmp;
    21         }
    22         first.next = end;
    23         return header.next;
    24     }
    25 }
  • 相关阅读:
    Docker 设置阿里云镜像
    Linux 安装Navicat Premium 15
    Ubuntu常用工具安装
    Docker安装MongoDB、MySQL、Jenkins、Gitlab、Nginx
    Ubuntu18.04修改apt-get源
    Spring定时任务
    Quartz学习总结
    cron表达式
    将VirtualBox里安装的虚拟机在后台运行方法(在状态栏隐藏窗口)
    npm小结
  • 原文地址:https://www.cnblogs.com/reynold-lei/p/3423690.html
Copyright © 2011-2022 走看看