跟小刀 学有序链表的实现

  • 今天我们学习一下有序链表的实现。其实他和单向链表的结构是一样的,不过他是有序的。插入的时候不一样,我直接上代码吧
先写一个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)平均下来。。对于时间复杂度我没有过多研究。毕竟自己算法不会。满满的心塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值