• 【Offer】[6] 【从尾到头打印链表】


    题目描述

      从尾到头打印链表,将其添加到ArrayList当中输出
      

    思路分析

    1. 递归的思路
    2. 利用栈

    Java代码

    public class Offer006 {
        public static void main(String[] args) {
    
            ListNode ListNode1 = new ListNode(1);
            ListNode ListNode2 = new ListNode(2);
            ListNode ListNode3 = new ListNode(9);
            ListNode ListNode4 = new ListNode(6);
            ListNode ListNode5 = new ListNode(99);
            ListNode1.next = ListNode2;
            ListNode2.next = ListNode3;
            ListNode3.next = ListNode4;
            ListNode4.next = ListNode5;
            ArrayList<Integer> result = Offer006.printListFromTailToHead(ListNode1);
            for (int i = 0; i < result.size(); i++) {
                System.out.println(result.get(i));
            }
    
        }
    
        public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
            return Solution3(listNode);
        }
    
        // =================******** 题 解 **************======================
        // 此处要声明一个成员变量list用来存放 链表中的值
        private static ArrayList<Integer> list = new ArrayList<Integer>();
    
        /**
         * 递归的方法
         * 
         * @param listNode
         * @return
         */
        private static ArrayList<Integer> Solution1(ListNode listNode) {
            if (listNode != null) {
                Solution1(listNode.next);
                list.add(listNode.val);
            }
            return list;
        }
    
        /**
         * 利用栈,占中存放ListNode
         * 
         * @param listNode
         * @return
         */
        private static ArrayList<Integer> Solution2(ListNode listNode) {
            Stack<ListNode> stack = new Stack<ListNode>();
            while (listNode != null) {
                stack.push(listNode);
                listNode = listNode.next;
            }
            while (!stack.isEmpty()) {
                list.add(stack.pop().val);
            }
            return list;
        }
    
        /**
         * 利用栈 栈中存放值
         * 
         * @param listNode
         * @return
         */
        private static ArrayList<Integer> Solution3(ListNode listNode) {
            Stack<Integer> stack = new Stack<Integer>();
            while (listNode != null) {
                stack.push(listNode.val);
                listNode = listNode.next;
            }
    
            while (!stack.isEmpty()) {
                list.add(stack.pop());
            }
            return list;
        }
    }
    
    

    代码链接

    剑指Offer代码-Java

  • 相关阅读:
    微信小程序之阻止冒泡事件
    微信小程序之生成二维码
    微信小程序之数据缓存和数据获取
    微信小程序之分享功能
    抽丝剥茧——策略设计模式
    抽丝剥茧——单例设计模式
    抽丝剥茧——备忘录设计模式
    手把手教你Smarty缓存技术(转)
    二级域名session 共享方案(转)
    MySQL监控、性能分析——工具篇
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer6-cong-wei-dao-tou-da-yin-lian-biao.html
Copyright © 2020-2023  润新知