• 反转单链表递归实现


    package org.zl.test.caculateMethod;
    
    public class ReverseLinkedList {
        
        public static class Node<T>{
            public T data;
            public Node<T> next;
            public Node(T data) {
                super();
                this.data = data;
            }
            @Override
            public String toString() {
                return "Node [data=" + data + ", next=" + next + "]";
            }
        }
    
        public static class LinkedList<T>{
            public Node<T> head;
            public Node<T> tail;
            
            public LinkedList<T> add(Node<T> node){
                if (head == null) {
                    head = node;
                } else {
                    tail.next = node;
                }
                tail = node;
                return this;
            }
            
            /**
             * 递归实现链表反转
             * @param currentNode
             * @return
             */
            public Node<T> reverse(Node<T> currentNode) {
                if (currentNode == null) {
                    return null;
                }
                if (currentNode.next == null) {
                    this.head = currentNode;
                    return head;
                }
                Node<T> pred = reverse(currentNode.next);
                currentNode.next = null;
                pred.next = currentNode;
                this.tail = currentNode;
                return currentNode;
            }
            
            
            @Override
            public String toString() {
                StringBuilder sb = new StringBuilder();
                if (head == null) {
                    return sb.toString();
                }
                Node<T> currentNode = head;
                while(currentNode != null) {
                    sb.append(currentNode.data).append(',');
                    currentNode = currentNode.next;
                }
                return sb.toString();
            }
        }
        
        public static void main(String[] args) {
            LinkedList<Integer> linkedList = new LinkedList<Integer>();
            for(int i=1;i<=50;i++) {
                linkedList.add(new Node<Integer>(i));
            }
            System.out.println("转换前:"+linkedList.toString());
            linkedList.reverse(linkedList.head);
            System.out.println("转换后:"+linkedList.toString());
            System.out.println("转换后linkedList的尾节点是:"+linkedList.tail);
            linkedList.add(new Node<Integer>(-1));
            linkedList.add(new Node<Integer>(-2));
            linkedList.add(new Node<Integer>(-3));
            System.out.println("转换后添加的尾节点是:"+linkedList.toString());
        }
        
    }

    执行结果:

    转换前:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,
    转换后:50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,
    转换后linkedList的尾节点是:Node [data=1, next=null]
    转换后添加的尾节点是:50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,-1,-2,-3,
  • 相关阅读:
    highcharts绘制股票k线
    利用meta标签将http请求换成https请求
    path.join 与 path.resolve 的区别
    【转】弧度和角度的转换
    块级元素和行内元素的区别 (block vs. inline)
    ubuntu下安装Apache + PHP + Mysql
    [读书笔记] CSS权威指南2: 结构和层叠
    [读书笔记] CSS权威指南1: 选择器
    [读书笔记] Head First 设计模式
    深入浅出React Native 3: 从零开始写一个Hello World
  • 原文地址:https://www.cnblogs.com/swave/p/11338744.html
Copyright © 2020-2023  润新知