[剑指offer] 从尾到头打印链表(Java)

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

思路:从头到尾把值输入到栈里面,然后出栈;或者用递归的方法;或者Collections的reverse()反转list值

public class ListNode{
    int val;
    ListNode next=null;

    ListNode(int val) {
       this.val = val;
        }    
}

解法一:

import java.util.ArrayList;
import java.util.Stack;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        Stack<Integer> stack = new Stack<Integer>();
        if(listNode==null)
            return list;
        while(listNode!=null){
            stack.push(listNode.val);
            listNode = listNode.next;
        }
        while(!stack.empty()){
            list.add(stack.pop());
        }
        return list;
    }
}

解法二:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(listNode==null)
            return list;
        if(listNode!=null){
            list = printListFromTailToHead(listNode.next);
            list.add(listNode.val);
        }
        return list;
    }
}

解法三:

import java.util.ArrayList;
import java.util.Collections;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        while(listNode!=null){
            list.add(listNode.val);
            listNode = listNode.next;
        }
        Collections.reverse(list);
        return list;
    }
}

猜你喜欢

转载自blog.csdn.net/w584212179/article/details/84833142