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

    • 递归:从尾部开始处理

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

  • 相关阅读:
    collections.ChainMap类合并字典或映射
    collections.namedtuple()命名序列元素
    过滤、修改和替换列表数据
    快速排序
    itertools.groupby()分组字典列表
    operator.attrgetter() 进行对象排序
    operator.itemgetter() 字典列表排序
    collections.Counter类统计列表元素出现次数
    递归
    正则表达式的一些题
  • 原文地址:https://www.cnblogs.com/hanxue112253/p/8533426.html
Copyright © 2011-2022 走看看