剑指offer刷题记录3——从尾到头打印链表

题目描述:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

解法一:递归

import java.util.ArrayList;
public class Solution {
    ArrayList<Integer> arrayList = new ArrayList<Integer>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if(listNode != null) {
            printListFromTailToHead(listNode.next);
            arrayList.add(listNode.val);
        }
        return arrayList;
    }
}

运行时间:20ms

占用内存:9344k

递归是依靠栈结构来实现的,因此解法二使用栈来解决问题。

解法二:栈

import java.util.ArrayList;
import java.util.Stack;

public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        Stack<Integer> stack = new Stack<Integer>();
        ArrayList<Integer> arraylist = new ArrayList<Integer>();
        while(listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while(!stack.isEmpty()) {
            arraylist.add(stack.pop());
        }
        return arraylist;
    }
}

运行时间:25ms

占用内存:9348k

方法总结

Stack.isEmpty()返回栈是否为空

Stack.push(Object item)像栈顶添加元素

Stack.pop()从栈顶删除一个元素并返回该元素,当栈为空时会抛出异常

猜你喜欢

转载自blog.csdn.net/qq_37684824/article/details/82875404