1. 程式人生 > >連結串列 從尾到頭列印連結串列

連結串列 從尾到頭列印連結串列

知識點:

連結串列是一種動態資料結構,是因為連結串列在建立時,無需知道連結串列的長度,當插入一個節點時,只需要為新節點分配記憶體,然後調整指標的指向來確保新節點被連線到連結串列中。記憶體分配是在每新增一個節點分配一次記憶體。由於沒有閒置的記憶體,連結串列的空間效率比陣列高。


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函式中如何建立一個新的連結串列