剑指offer算法题
链表
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
题目分析
思路一
利用栈的先入后出特性,利用一个栈来存储链表内的值,然后在添加到ArrayList中。
下面是JAVA算法实现:
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
if(listNode == null){
return list;
}
Stack<Integer> ss =new Stack<>();
while(listNode != null){
ss.push(listNode.val);
listNode = listNode.next;
}
while(!ss.isEmpty()){
list.add(ss.pop());
}
return list;
}
思路二
利用递归,找到最后一个节点,然后开始向list添加vale。这里注意,申请的ArrayList一定要在函数外面,不然你递归到最后总是得到第一个节点的value。
下面是JAVA算法实现:
//注意要在函数外初始化list。
ArrayList<Integer> list = new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//判断当前节点是否为空。
if(listNode != null){
//判断下一个节点是否为空,不是则递归调用本函数。
if(listNode.next!=null){
printListFromTailToHead(listNode.next);
}
list.add(listNode.val);
}
return list;
}