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