有序链表

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可能为空)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值