一、每次把新遍历的链表值放到list索引为0的位置,实现逆序。
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
ArrayList list=new ArrayList<>();
if(listNode==null) return list;
while(listNode!=null){
list.add(0,listNode.val);
listNode=listNode.next;
}
return list;
}
}
二、利用栈实现逆序(先进后出)
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList printListFromTailToHead(ListNode listNode) {
ArrayList list=new ArrayList<>();
Stack stack=new Stack<>();
if(listNode==null) return list;
while(listNode!=null){
stack.push(listNode);
listNode=listNode.next;
}
while(!stack.isEmpty()){
list.add(stack.pop().val);
}
return list;
}
}
三、所有的栈都可以用递归实现,以下是递归方法
public class Solution {
ArrayList list=new ArrayList<>();
public ArrayList printListFromTailToHead(ListNode listNode) {
FromTailToHead(listNode);
return list;
}
public void FromTailToHead(ListNode listNode){
if(listNode!=null){
FromTailToHead(listNode.next);
list.add(listNode.val);
}
}
}