首先看到这个题目,我们会想到首先先遍历链表 用栈去收集这些结点,利用栈的先进后出的特点,最后分别结点进行出栈操作,并将结点的值添加到一个列表中,这样就能从尾到头打印每个节点的值
直接上代码
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.Stack;
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> list = new ArrayList<>();
while (!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}
}
除了这个方法,还有一个方法,代码更为简洁,其思想就是类似于调用了类似递归的方法,通过不断地去调用类的方法,方法中去调用自身。
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
public class Solution {
ArrayList<Integer> arrayList=new ArrayList<Integer>();//建立一个新的列表
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
this.printListFromTailToHead(listNode.next);//指向下一个节点
arrayList.add(listNode.val);//将当前节点的值存到列表中
}
return arrayList;
}
}