zoukankan      html  css  js  c++  java
  • LeetCode

    题目:

    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 ≤ mn ≤ length of list.

    思路:

    以下代码很多,但逻辑很直接,应该还可以简化

    package list;
    
    public class ReverseLinkedListII {
    
        public ListNode reverseBetween(ListNode head, int m, int n) {
            if (m == n) return head;
            ListNode p = new ListNode(0);
            p.next = head;
            ListNode firstPivot = null;
            ListNode firstPivotNext = null;
            ListNode prev = p;
            ListNode node = head;
            int i = 1;
            while (i <= n) {
                if (i > m && i < n) {
                    ListNode tmp = node;
                    node = node.next;
                    tmp.next = prev;
                    prev = tmp;
                } else if (i < m) {
                    node = node.next;
                    prev = prev.next;
                } else if (i == m) {
                    firstPivot = prev;
                    firstPivotNext = node;
                    ListNode tmp = node;
                    node = node.next;
                    tmp.next = null;
                    prev = tmp;
                } else if (i == n) {
                    ListNode tmp = node;
                    node = node.next;
                    tmp.next = prev;
                    firstPivot.next = tmp;
                    firstPivotNext.next = node;
                }
                ++i;            
            }
            return p.next;
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ListNode a1 = new ListNode(1);
            ListNode a2 = new ListNode(2);
            ListNode a3 = new ListNode(3);
            ListNode a4 = new ListNode(4);
            ListNode a5 = new ListNode(5);
            a1.next = a2;
            a2.next = a3;
            a3.next = a4;
            a4.next = a5;
            a5.next = null;
            ReverseLinkedListII r = new ReverseLinkedListII();
            ListNode head = r.reverseBetween(a1, 2, 5);
            while (head != null) {
                System.out.println(head.val);
                head = head.next;
            }
        }
    
    }
  • 相关阅读:
    Oracle创建上下文 SYS_CONTEXT
    闪回版本查询
    物化视图创建案例
    Oracle 多租户环境学习路线图
    【Mysql MHA】CentOS7.6+Mysql8.0.16 入坑
    【翻译】--19C Oracle 安装指导
    Docker(3)---常用命令
    Docker(2)---安装(设置镜像加速器)
    Docker(1)---基础概念
    AMQP高级消息队列协议
  • 原文地址:https://www.cnblogs.com/null00/p/5102040.html
Copyright © 2011-2022 走看看