zoukankan      html  css  js  c++  java
  • Java实现单向链表反转

    public class LinkedListTest {
    
        public static void main(String[] args) {
            Node A = new Node("A");
            Node B = new Node("B");
            Node C = new Node("C");
            Node D = new Node("D");
            Node E = new Node("E");
            Node F = new Node("F");
            A.next = B;
            B.next = C;
            C.next = D;
            D.next = E;
            E.next = F;
            print(A);
    
            LinkedListReversor reversor = LinkedListReversor.RECURSION;
            System.out.println(reversor.getStrategy() + ":");
            Node tmp = reversor.execute(A);
            print(tmp);
    
            reversor = LinkedListReversor.NO_RECURSION;
            System.out.println(reversor.getStrategy() + ":");
            print(reversor.execute(tmp));
        }
    
        private static void print(Node node) {
            while (node != null) {
                System.out.print(node.value);
                node = node.next;
                if (node != null) {
                    System.out.print("->");
                } else {
                    System.out.println();
                }
            }
        }
    
    }
    
    class Node {
        public String value;
        public Node next;
    
        public Node(String value) {
            this.value = value;
        }
    }
    
    enum LinkedListReversor {
        RECURSION("递归") {
            @Override
            public Node execute(Node node) {
                Node prev = null;
                if (node == null || node.next == null) {
                    prev = node;
                } else {
                    Node tmp = execute(node.next);
                    node.next.next = node;
                    node.next = null;
                    prev = tmp;
                }
                return prev;
            }
        },
        NO_RECURSION("非递归") {
            @Override
            public Node execute(Node node) {
                Node prev = null;
                while (node != null) {
                    Node tmp = node;
                    node = node.next;
                    tmp.next = prev;
                    prev = tmp;
                }
                return prev;
            }
        };
        private String strategy;
    
        private LinkedListReversor(String strategy) {
            this.strategy = strategy;
        }
    
        public abstract Node execute(Node node);
    
        public String getStrategy() {
            return strategy;
        }
    }

    2. 实现思路

    • 递归:从尾部开始处理

    • 非递归:从头部开始处理

  • 相关阅读:
    Akka详细介绍
    列举spark所有算子
    command not found所有执行命令总是报找不到
    Spark启动报错|java.io.FileNotFoundException: File does not exist: hdfs://hadoop101:9000/directory
    斐波那契数列的优化
    ganglia之web界面介绍
    linux环境下载和安装scala
    windows清空电脑的DNS缓存
    win10安装mysql一直卡在最后一步进行不下去
    maven的依赖管理详细
  • 原文地址:https://www.cnblogs.com/hanxue112253/p/8533426.html
Copyright © 2011-2022 走看看