跟小刀 學有序鏈表的實現

  • 今天我們學習一下有序鏈表的實現。其實他和單向鏈表的結構是一樣的,不過他是有序的。插入的時候不一樣,我直接上代碼吧
先寫一個link

public class Link {


    public long iData;

    public Link next;

    public Link(long data){
        iData =data;
    }

    public void display(){
        System.out.print(iData+" ");
    }
}
然後寫一個有序鏈表的實現類
public class SortLink {


    private Link first;

    public SortLink(){
        first = null;
    }

    public void insert(long dd){
        Link newLink = new Link(dd);
        Link provious = null;
        Link current = first;
        //[1]  [3] 插入[2]
        //如果比當前的大就插入到當前的後面   這裏就是找到插入點。
        //如果dd 大於第一個節點的話。就從下一個節點開始找。
        while(current !=null && dd >current.iData){
            provious = current;
            current =current.next;
        }
        // 沒有到找所以就可以添加到第一個。
        if(provious == null)
            first = newLink;
        else
            //如果找到了就插進入
            provious.next =newLink;

        newLink.next = current;     


    }

    public void display(){
        System.out.print("sortLink( 小--大):");
        Link current = first;

        while(current!=null){
            current.display();
            current = current.next;
        }
        System.out.println();
    }

    public long deleteFirst(){
        Link temp = first;
        first =first.next;

        return temp.iData;
    }
}

有序鏈表就是在插入的時候做了一些處理。

測試類:


public class TestSortLink {

    public static void main(String[] args) {

        SortLink sort = new SortLink();
        sort.insert(20);
        sort.insert(40);
        sort.display();
        sort.insert(10);
        sort.insert(30);
        sort.insert(50);
        sort.display();
        sort.deleteFirst();
        sort.deleteFirst();
        sort.display();

    }

測試結果:

sortLink( --大):20 40 
sortLink( --大):10 20 30 40 50 
sortLink( --大):30 40 50 

有序鏈表在一些使用有序的場景的時候很合適。。它時間複雜度爲O(n/2)平均下來。。對於時間複雜度我沒有過多研究。畢竟自己算法不會。滿滿的心塞。

發佈了35 篇原創文章 · 獲贊 13 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章