前篇->双端链表
在某些应用场景中我们需要链表中的数据是有序的,例如优先级队列,堆。如果有有序链表就好了。我们可以获得链表中的最大或者最小值(看你是啥样的排序)。
有序链表的核心就是在插入部分,我们需要遍历链表的结点从而找到合适的插入位置,从而保持链表有序状态。
实现有序链表
public class SortedList {
private LinkNode head;
public SortedList(){
head = null;
}
public boolean isEmpty(){
return head==null;
}
//按照顺序插入小->大
public void insert(int data){
LinkNode newNode = new LinkNode(data);
LinkNode previous = null;//previous是必须的,用于记录前一个节点
LinkNode current = head;
//寻找合适的插入位置
while(current!=null&&data>current.getIdata()){
previous = current;
current = current.getNext();
}
//插入新的结点
if(previous==null){
head = newNode;
}else{
previous.setNext(newNode);
}
newNode.setNext(current);
}
public LinkNode remove(){
LinkNode temp = head;
head = head.getNext();
return temp;
}
//取得最小值
public LinkNode getMin(){
return head;
}
public void displayList(){
LinkNode current = head;
while(current!=null){
current.displayNode();
current = current.getNext();
}
System.out.println();
}
}
TestMain:
public class TestMain {
public static void main(String[] args) {
SortedList list = new SortedList();
list.insert(1);
list.insert(3);
list.insert(2);
list.insert(5);
list.displayList();//1 2 3 5
System.out.println(list.getMin().getIdata());//1
}
}