在有序链表中,数据都是按照关键字有序排列的,类似于有序数组,但是有序链表的插入速度比有序数组要快的多,而且链表的存储空间可以扩展,而数组的存储空间则是不可扩展的,这也是优势之一;缺点是实现困难。
插入和删除某一结点,需要使用Find();Delete();方法。
其中,在链表移动的时候,需要加一个previous引用,要把previous设为Null,这样方便判断previous是否还在表头。
举例:
public class SortedListA {
public static void main(String[] args) {
// TODO Auto-generated method stub
SortedList sortedlist = new SortedList();
sortedlist.insert(20);
sortedlist.insert(50);
sortedlist.displayList();
sortedlist.insert(30);
sortedlist.insert(10);
sortedlist.displayList();
sortedlist.remove();
sortedlist.displayList();
}
}
class Link{
public long dDate;
public Link next;
public Link(long dd){
dDate = dd;
}
public void displayLink(){
System.out.println(dDate+" ");
}
}
class SortedList{
private Link first;
public SortedList(){
first=null;
}
public boolean isEmpty(){
return first==null;
}
public void insert(long key){
Link newLink = new Link(key);
Link previous = null;
Link current = first;
while(current!=null&&key>current.dDate){
previous=current;
current=current.next;
}
if(previous==null){
first = newLink;
}
else
previous.next=newLink;
newLink.next=current;
}
public Link remove(){
Link t =first; //将t赋予first的值,然后把first右移,就完成了链表的移动。
first = first.next;
return t;
}
public void displayList(){
System.out.println("List (first->last): ");
Link current = first;
while (current!=null){//从头到尾展示
current.displayLink();
current=current.next;
}
System.out.println(" ");
}
}
输出结果:
List (first->last):
20
50
List (first->last):
10
20
30
50
List (first->last):
20
30
50
写这篇博客的时候,还遇到一个小BUG,就是在同一个包里面,不能设置同一个名字的类,否则会出现The Type ? is already defined;