从头到尾打印链表

Posted by DH on August 4, 2017

题目

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

分析

最容易想到的就是进行链表的翻转,但是这样会改变原始的输入,可能不满足要求。

链表从后先输出,就是先进后出的思想,那么读取一个入栈一个,最后依次弹出,就可以满足要求。

代码

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        // 存储结果的链表
		ArrayList<Integer> resultList = new ArrayList<>();
		
		// 创建一个栈
		Stack<Integer> stack = new Stack<>();
		
		// 从头开始遍历链表
		while (listNode != null) {
			stack.push(listNode.val);
			listNode = listNode.next;
		}
		
		// 出栈
		while(!stack.isEmpty()){
			resultList.add(stack.pop());
		}
		return resultList;
    }
}