剑指offer[从尾到头打印链表]

剑指offer[从尾到头打印链表]

题目描述

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

思路

因为要求是从尾到头打印,所以可以利用栈先进后出的特点

代码

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
     Stack<Integer> stack = new Stack<>();
     ArrayList<Integer> list = new ArrayList<>();
        while (listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }
 
        
        while (!stack.isEmpty()) {
            list.add(stack.pop());
        }
        return list;        
    }
}

细节知识

  • 关于链表
    • 每个链表都包括一个LinikedList对象和许多Node对象,LinkedList对象通常包含头和尾节点的引用,分别指向链表的第一个节点和最后一个节点。而每个节点对象通常包含数据部分data,以及对上一个节点的引用prev和下一个节点的引用next,只有下一个节点的引用称为单向链表,两个都有的称为双向链表。next值为null则说明是链表的结尾,如果想找到某个节点,我们必须从第一个节点开始遍历,不断通过next找到下一个节点,直到找到所需要的。栈和队列都是ADT,可以用数组来实现,也可以用链表实现。
  • 关于stack
    • Stack实际上也是通过数组去实现的。
      执行push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。
      执行peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。
      执行pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。

猜你喜欢

转载自blog.csdn.net/qq_42404593/article/details/84305062
今日推荐