- 今天我們學習一下有序鏈表的實現。其實他和單向鏈表的結構是一樣的,不過他是有序的。插入的時候不一樣,我直接上代碼吧
先寫一個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)平均下來。。對於時間複雜度我沒有過多研究。畢竟自己算法不會。滿滿的心塞。