• Java实现单向链表反转


    0. 环境:

    Java: jdk1.8.0_91

    1. 代码

    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. 实现思路

    • 递归:从尾部开始处理

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

  • 相关阅读:
    Maven+SSM框架搭建【spring+springmvc+mybatis】
    [福大软工] W班 总成绩排行榜
    项目Beta冲刺团队随笔集
    45度炸队Alpha冲刺博客集
    SDN期末验收
    小黄衫——共同的荣誉
    软件工程实践总结作业
    SDN第五次上机作业
    SDN第四次作业
    总结随笔
  • 原文地址:https://www.cnblogs.com/hiver/p/7008112.html
Copyright © 2020-2023  润新知