题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。
先上代码。
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> ret = new ArrayList<Integer>();
func(ret, listNode);
return ret;
}
public void func(ArrayList<Integer> list, ListNode node){
if(node == null)
return ;
func(list, node.next);
list.add(node.val);
}
利用递归可以很方便的求解此题。但需要注意在调用层级很深的情况下,递归的方式可能会导致栈溢出。因此可以使用另外一种方式求解:借助辅助栈(递归本身也是栈的逻辑)。遍历链表的同时,将每一个节点入栈,遍历结束后,再将栈内的数据依次弹出即可。
网友评论