1. 程式人生 > >java 建立連結串列,使用尾插法和頭插法

java 建立連結串列,使用尾插法和頭插法

1。尾插法

工作原理:

建立一個類MyLinked設定一個儲存連結串列資料的屬性int data,在設定儲存連結串列內下一個資料節點的屬性MyLinked next.

定義一個建立連結串列的方法,定義head永遠儲存第一個節點地址,storage永遠儲存最後一個地址,last儲存每次迴圈產生的臨時節點地址,建立資料給data,建立新地址給storage。next做拼接storage接受當前地址作為最後一個地址儲存。

程式碼實現:

import java.util.Random;

public class MyLinked {
    int data;    //建立一個數組的屬性
    MyLinked next; //建立一個儲存下一個節點的屬性
    public MyLinked ceate(int len) {
        Random r = new  Random();//隨機物件
        MyLinked head,storage,last;  //定義三個物件,head 為 永遠儲存第一個節點的地址
        //storage 為 永遠儲存最後一個節點的地址
        //last 為  新的臨時節點
        head = storage = last = null;
        for (int i = 0; i <len ; i++) {
            int temp = r.nextInt(50);
            last = new MyLinked();//建立一個新的臨時節點
            last.data = temp;  //為屬性賦值
            if (head ==null){  //判斷連結串列是否是第一次賦值
                head = storage = last;
            }else {
                storage.next = last;//將新節點連線到連結串列的尾部
                storage = last;  //永遠的儲存最後一個節點的地址
            }
        }
        return head;
    }
    public static void main(String[] args) {
        MyLinked my = new MyLinked();//引用
        MyLinked ww =  my.ceate(10);//將隨機的數值賦值給ww
        for (int i = 0; i <10 ; i++) {
            System.out.print(ww.data+"  ");//列印第一個數的值;
            ww = ww.next;//將下一個數my.next值賦給xx後,下一輪xx.data就相當於這個數的值;
        }
    }
}

————————————————————————————————————————————————————————2。頭插法

程式碼實現:

import java.util.Random;

//建立連結串列類 頭插法
class MLink{
    //當Mlink例項化後形成一個連結串列的節點物件
    //節點物件中的屬性
    //節點儲存的屬性
    public int data;
    //儲存下一個連結串列節點地址的屬性
    public MLink next;

    /**
     *   功能:建立一個連結串列,並返回頭節點的地址
     * @param len 建立連結串列資料的長度
     * @return  返回頭節點的地址
     */
    public MLink create(int len){
        MLink header=null;
        //建立隨機物件
        Random ra=new Random();
        //生成指定長度的隨機數
        for (int i = 0; i <len ; i++) {
            //建立隨機數
            int num=ra.nextInt(100);
            //建立一個節點物件
            MLink temp=new MLink();
            //儲存資料
            temp.data=num;
            //是否第一次建立連結串列節點
            if(header==null)
                header=temp;
            else{
                temp.next=header;
                header=temp;
            }
        }
        return header;
    }

    /**
     * 遍歷整個連結串列
     * @param header 連結串列中第一個節點的地址
     */
    public void show(MLink header){
        while(header!=null){
            System.out.print(header.data+" ");
            //遍歷下一個節點
            header=header.next;
        }
    }
}
public class Demo01 {
    public static void main(String[] args) {
        //建立連結串列物件
        MLink link=new MLink();
        //建立一個連結串列,並返回第一個節點的地址
        MLink header=link.create(8);
        //遍歷建立的連結串列
        link.show(header);
    }
}