题目
输入一个链表的头结点,从尾到头反过来打印出每个节点的值,链表节点定义如下:
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
思路
通常思路是先将链表进行反转,然后从头到尾进行遍历输出;但是这样做无疑是改变了原来链表的结构;接下来我们看一种不改变链表结构的算法,那就是用栈的特点先进后出,大体思路就是先将链表从头到尾遍历的同时将节点的值压入一个栈中,然后从栈顶开始逐个输出节点的值。
代码实现
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode)
{
ArrayList<Integer> arrayList=new ArrayList<Integer>();
Stack<Integer> stack=new Stack<Integer>();
while(listNode!=null)
{
stack.push(listNode.val);
listNode=listNode.next;
}
while(!stack.isEmpty())
{
arrayList.add(stack.pop());
}
return arrayList;
}