一、每次把新遍历的链表值放到list索引为0的位置,实现逆序。

public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> 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<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list=new ArrayList<>();
        Stack<ListNode> 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<Integer> list=new ArrayList<>();
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {       
        FromTailToHead(listNode);
        return list;
    }
     public void FromTailToHead(ListNode listNode){
        if(listNode!=null){
            FromTailToHead(listNode.next);
            list.add(listNode.val);
        }      
     }
}

 

收藏 打印