zoukankan      html  css  js  c++  java
  • 剑指Offer:面试题5——从尾到头打印链表(java实现)

    问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值。

    首先定义链表结点

    public class ListNode {
            int val;
            ListNode next = null;
            ListNode(int val){
                this.val = val;
            }
        }

    思路1:此题明显想到是利用栈的思想,后进先出,先遍历链表,依次将结点值进栈。最后在遍历栈出栈。

    public static Stack<Integer> printListReverse_Stack(ListNode listNode){
            Stack<Integer> stack = new Stack<Integer>();
            if(listNode != null){
                ListNode p = listNode;
                while(p != null){
                    stack.add(p.val);
                    p = p.next;
                }
            }
            return stack;
        }

    思路2:直接遍历链表,按照头插法依次插入ArrayList即可

    public static ArrayList<Integer> printListFromTailToHead(ListNode listNode){//表头也存储元素
    
    
            ArrayList<Integer> print = new ArrayList<Integer>();
            if(listNode == null){
                return print;
            }
            int add = 0;
            ListNode p = listNode;
            while(p != null){
                print.add(0, p.val);
                p = p.next;
            }
    
            return print;
    
    
        }

    思路3:可以使用递归的思想(本质也是栈的思想)

    public ArrayList<Integer> printListReversely_Recursively(ListNode listNode){
            ArrayList<Integer> print = new ArrayList<Integer>();
            if(listNode == null){
                return print;
            }
            print.addAll(printListReversely_Recursively(listNode.next));
    
            print.add(listNode.val);
            return print;
    
        }
  • 相关阅读:
    POJ
    FZU
    HDU
    HDU
    HDU
    HDU
    Educational Codeforces Round 84 E. Count The Blocks
    B Boundary(由弦求圆)
    D. Maximum Sum on Even Positions(翻转1次,求最大偶数位和)
    E. DeadLee(思维,拓扑图处理)
  • 原文地址:https://www.cnblogs.com/wenbaoli/p/5655729.html
Copyright © 2011-2022 走看看