zoukankan      html  css  js  c++  java
  • 剑指offer三从头到尾打印链表

    一、题目:

      输入一个链表,从尾到头打印链表每个节点的值。

    二、解题方法:

      方法一:采用递归的方式实现

           方法二:借助堆栈的“后进先出”实现

    import java.util.ArrayList;
    import java.util.Stack;
    
    /**
     * 输入一个链表,从尾到头打印链表每个节点的值
     */
    class Test13 {
        public static void main(String[] args) {
            //创建单链表
            ListNode node1 = new ListNode(1);
            ListNode node2 = new ListNode(2);
            ListNode node3 = new ListNode(3);
            node1.next = node2;
            node2.next = node3;
    
            //采用递归的方式实现
            PrintListTailtoHead p = new PrintListTailtoHead();
            ArrayList<Integer> list = p.printListFromTailToHead(node1);
            System.out.println(list.toString());
    
            System.out.println("-------------");
    
            //借助堆栈的“后进先出”实现(容易理解)
            PrintListTailtoHead2 p2 = new PrintListTailtoHead2();
            ArrayList<Integer> list2 = p2.printListFromTailToHead2(node1);
            System.out.println(list2.toString());
        }
    }
    
    
    //节点
    class ListNode {
        int value;
        ListNode next = null;
    
        ListNode() {}
    
        ListNode(int value) {
            this.value = value;
        }
    }
    
    //方法1:采用递归的方式实现
    class PrintListTailtoHead {
        public ArrayList<Integer> printListFromTailToHead(ListNode headNode) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            //递归
            if (headNode != null) {
                if (headNode.next != null) {
                    list =printListFromTailToHead(headNode.next);
                }
                list.add(headNode.value);
            }
            return list;
        }
    }
    
    //方法2:借助堆栈的“后进先出”实现
    class PrintListTailtoHead2{
        public ArrayList<Integer> printListFromTailToHead2(ListNode headNode) {
            //存入栈中
            Stack<Integer> stack=new Stack<Integer>();
            while (headNode!=null){
                stack.push(headNode.value);
                headNode=headNode.next; //重要,不要忘记
            }
    
            //从栈中取出存入集合中
           ArrayList<Integer> arrayList=new ArrayList<Integer>();
            while (!stack.empty()) {
                arrayList.add(stack.pop());
    
            }
    
            //返回结果
            return arrayList;
        }
    }
    View Code
  • 相关阅读:
    纯CSS气泡框实现方法探究
    CSS教程:div垂直居中的N种方法[转]
    内容超过长度后以省略号显示
    mCustomScrollbar
    js获取页面元素距离浏览器工作区顶端的距离
    nicescroll参数
    input-placeholder获取焦点清空
    bootstrap去除默认的点击留白处摸态框消失
    【转载 | 笔记】IIS无法删除应该程序池 因为它包含X个应用程序
    【转载】npm查看全局安装过的包
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/7609577.html
Copyright © 2011-2022 走看看