剑指offer——从尾到头打印链表

输入一个链表,从尾到头打印链表每个节点的值。

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        
    }
}

  

可以利用的先入后出的特点,顺序遍历链表,将数据压入栈中,最后在从栈中弹出到结果ArrayList中即可

ArrayList的初始化

ArrayList<Integer> arrayList = new ArrayList<Integer>();

  

其次,集合的大小用size(),数组的大小用length()

ArrayList的t添加:add(E object)

获取:get(int location)

ArrayList的遍历方式

public class ArrayListDemo {  
    public static void main(String[] args) {  
        List<String> al = new ArrayList<String>();  
        al.add("wangw1");  
        al.add("wangw3");  
        al.add("wangw4");  
        al.add("wangw5");  
          
        //遍历方式1  
        Iterator<String> it1 = al.iterator();  
        while(it1.hasNext()){  
            System.out.println(it1.next());  
        }  
          
        //遍历方式2  
        for(Iterator it2 = al.iterator();it2.hasNext();){  
            System.out.println(it2.next());  
        }  
          
        //遍历方式3  
        for(String temp:al){  
            System.out.println(temp);  
        }  
          
        //遍历方式4  
        for(int i = 0;i<al.size();i++){  
            System.out.println(al.get(i));  
        }  
    }  
}  

  

自己的解法:

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if(listNode == null || listNode.next == null){
            return new ArrayList<Integer>();
        }
        ArrayList<Integer> array = new ArrayList<Integer>();
        ListNode list = listNode;
        while(list.next != null){
            array.add(list.val);
            list = list.next;
        }
        ArrayList<Integer> arrayList = new ArrayList<Integer>();
        arrayList.add(list.val);
        for(int i = array.size() - 1; i >= 0; --i ){
            arrayList.add(array.get(i));
        }
        return arrayList;
    }
}

  

利用栈:

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

  

别人的递归调用:

注意返回结果arrayList是定义在外面的,而且,里面遍历链表是用的if,不是循环

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

  

原文地址:https://www.cnblogs.com/SkyeAngel/p/8521239.html