1.题目
输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
2.解题思路
1.利用Stack栈后进先出。
2.利用递归。
class ListNode{
int val;
ListNode next=null;
public ListNode(int val) {
this.val = val;
}
}
public class PrintListFromTailToHead {
/**
* 利用java里的Stack对节点进行后进先出操作
* @param listNode
* @return
*/
/*public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list=new ArrayList<>();
Stack<ListNode> stack=new Stack<>();
while(listNode!=null){
stack.push(listNode);
listNode=listNode.next;
}
while(!stack.empty()){
list.add(stack.pop().var);
}
return list;
}*/
/**
* 利用递归
*/
ArrayList<Integer> list=new ArrayList<>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
printListFromTailToHead(listNode.next);
list.add(listNode.val);
}
return list;
}
public static void main(String[] args) {
ListNode listNode1=new ListNode(1);
ListNode listNode2=new ListNode(2);
ListNode listNode3=new ListNode(3);
ListNode listNode4=new ListNode(4);
listNode1.next=listNode2;
listNode2.next=listNode3;
listNode3.next=listNode4;
PrintListFromTailToHead printListFromTailToHead=new PrintListFromTailToHead();
ArrayList<Integer> list=printListFromTailToHead.printListFromTailToHead(listNode1);
System.out.println(list.toString());
}
}