链表 从尾到头打印链表

版权声明:转载请注明出处 https://blog.csdn.net/fan_lulu/article/details/83041184

知识点:

链表是一种动态数据结构,是因为链表在创建时,无需知道链表的长度,当插入一个节点时,只需要为新节点分配内存,然后调整指针的指向来确保新节点被连接到链表中。内存分配是在每添加一个节点分配一次内存。由于没有闲置的内存,链表的空间效率比数组高。


integer和int的区别:

如果我们定义一个int类型的数,只是用来进行一些加减乘除的运算or作为参数进行传递,那么就可以直接声明为int基本数据类型,但如果要像对象一样来进行处理,那么就要用Integer来声明一个对象,因为java是面向对象的语言,因此当声明为对象时能够提供很多对象间转换的方式,与一些常用的方法。自认为java作为一们面向对象的语言,我们在声明一个变量时最好声明为对象格式,这样更有利于你对面向对象的理解。

举例说明

  ArrayList al=new ArrayList();

  int n=40;

  Integer nI=new Integer(n);

  al.add(n);//不可以

  al.add(nI);//可以

int i =1;Integer i= new Integer(1);(要把integer 当做一个类看);但由于有了自动装箱和拆箱   (http://www.cnblogs.com/shenliang123/archive/2012/04/16/2451996.html),使得对Integer类也可使用:Integer i= 1;    int 是基本数据类型(面向过程留下的痕迹,不过是对java的有益补充),Integer 是一个类,是int的扩展,定义了很多的转换方法


思路:利用栈,将链表遍历并压栈,遍历结束后,进行出栈。


/**
*    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){
        Stack<Integer> stack = new Stack<Integer>();
        while(listNode!=null){
            stack.push(listNode.val);
            listNode=listNode.next;
        }
        ArrayList<Integer> newList=new ArrayList<Integer>();
        while(!stack.isEmpty()){
                newList.add(stack.pop());
            }
        return newList;
    }
}

以上代码,在牛客网运行成功,

但目前有一问题,main函数中如何创建一个新的链表

猜你喜欢

转载自blog.csdn.net/fan_lulu/article/details/83041184