package javal.util.test;
/**
* 有序链表
* @author lh
*/
public class SortLinkList {
private Link first;
public SortLinkList() {
first =null;
}
public boolean isEmpty() {
return first==null;
}
public void add(long data) {
Link newLink = new Link(data);
Link previous = null;
Link current = first;
//找到新增结点的插入位置
while(current !=null && data > current.data) {
previous =current;
current=current.next;
}
if(previous == null) {
first = newLink;
}else {
previous.next =newLink;
}
newLink.next=current;
}
public Link remove() {
Link temp =first;
first = first.next;
return temp;
}
public void display() {
Link current = first;
while(current != null) {
current.show();
current = current.next;
}
}
public static void main(String[] args) {
SortLinkList list = new SortLinkList();
list.add(10);
list.add(40);
list.add(30);
list.add(20);
list.add(1);
list.display();
}
}
add()方法中, newLink代表新增的数据,previous代表前一个数据,current代表当前数据(新数据未插入前)。
while循环 判断当前数据是否为空,如果为空则说明链表为空。则链表的表头为newLink,newLink 下一个节点为空。
如果current不为空,则比较新增数据与当前数据的大小,如果比当前数据小,则表头仍然newLink,newLink的下一个节点指向当前数据。如果新增数据比当前数据大,则记录当前数据为previous,current变为下一个比较数据,继续之前的过程,直到找到比新增数据大的数据或者current为空结束。
进入else条件,previous的下一个数据指向新增数据,新增数据的下一条数据指向current.(current可能为空)