跟小刀 学有序链表的实现

来源:互联网 发布:网络著作权.司法解释 编辑:程序博客网 时间:2024/04/30 12:18
  • 今天我们学习一下有序链表的实现。其实他和单向链表的结构是一样的,不过他是有序的。插入的时候不一样,我直接上代码吧
先写一个linkpublic 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)平均下来。。对于时间复杂度我没有过多研究。毕竟自己算法不会。满满的心塞。

0 0
原创粉丝点击