05_从尾到头打印链表
2020-05-18 本文已影响0人
是新来的啊强呀
要求:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路:
方法1:使用递归的方法,递归在本质上就是一个栈结构。故,每访问到一个节点的时候,先递归输出它后面的节点,再输出该节点自身,这样链表的输出结果接反过来了。
方法2:使用先入后出的思想,将原数组从头到尾取出,再依次加入到新的数组中,此时得到的新数组就是反过来的。
方法3:使用栈方法
// 方法一,递归的方法
public void printListFromTailToHead(ListNode node){
if(node != null){ // 退出条件是node到达尾部
printListFromTailToHead(node.next);
System.out.println(node.val+",");
}
}
// 方法二,利用先入后出的方法
public ArrayList<Integer> printFromTail(){
ArrayList<Integer> list = new ArrayList<>();
ListNode temp = head;
while(temp!=null){
list.add(0,temp.val); // 加入到新的集合中
temp = temp.next;
}
return list;
}
// 使用栈方法
public ArrayList<Integer> printListFromTailst(){
Stack<Integer> stack = new Stack();
ArrayList<Integer> list = new ArrayList<>();
ListNode temp = head;
while(temp!= null){
stack.push(temp.val);
temp = temp.next;
}
while(!stack.isEmpty()){
list.add(stack.pop());
}
return list;
}