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

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

利用栈实现的思路

对于链表数据的打印,如果是从头到尾的打印一般我们直接通过while循环判断Node.next是否存在来逐个打印即可,但是这里要求的是从尾到头的打印存放到ArrayList,这里可以使用栈的数据结构“后进先出”的特性来实现。也就是先把全部节点进栈存储,然后再弹栈遍历,思路简单。

/**
*    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 printListFromTailToHead(ListNode listNode) {
        Stack temp = new Stack<>(); //建立一个栈
        ArrayList newList = new ArrayList<>(); 
        ListNode t = listNode;
             //将数据都先存入栈中
            while( t != null ){
                
                temp.push(t.val);
                t = t.next;
            }
            //遍历栈
            while( !temp.empty() ){
                newList.add(temp.pop());
            }
            return newList;
  
       
    }
}

递归实现的思路:

通过每次递归调用打印的方法,传入参数是ListNode.next,直到最后一个节点开始存入到ArrayList。

public class Main {

     ArrayList arrayList = new ArrayList();
    public ArrayList printListFromTailToHead(ListNode listNode) {
   
        if(listNode!=null){
            this.printListFromTailToHead(listNode.next); 
          //到最后一个节点的时候开始存储数据到list中,从尾到头储存
            arrayList.add(listNode.val);
        }
        return arrayList;
    }
    }


 class ListNode {
         int val;
         ListNode next = null;

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

你可能感兴趣的:(输入一个链表,按链表值从尾到头的顺序返回一个ArrayList)