双端链表

package javal.util.test;

/**
 * 双端链表
 * @author lh
 */
public class FirstLastLink {
	private Link first;//第一个节点的引用
	private Link last; //最后一个节点的引用
	
	public FirstLastLink() {
		first = null;
		last  = null;
	}
	
	public boolean isEmpty() {
		return first == null;
	}
	
	public void addfirst(long data) {
		Link link = new Link(data);
		if(isEmpty()) { //如果为空 则 link就是第一个节点也是最后一个节点
			last = link;
		}
		link.next=first;
		first=link;
	}
	
	
	/*
	 * 皮
	 */
	public void addlast(long data) {
		Link link = new Link(data);
		if(isEmpty()) {
			first = link;
		}else {
			last.next=link;//先改变未插入数据前最后一个数据的下个数据的引用,就是link
		}
		last=link;//把last指向新增的数据
	}
	
	public long getfirst() {
		long temp = first.data;
		if(first.next==null) {
			last =null;
		}
		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) {
		FirstLastLink link =new FirstLastLink();
		link.addfirst(22);
		link.addfirst(33);
		link.addfirst(66);
		
		link.addlast(77);
		link.addlast(88);
		link.addlast(99);
		
		link.display();
	}
}

        双端链表和单链表基本上是一样的,只不过多了一个指向最后一个节点的引用,这样就可在链表尾端插入数据啦,如果只使用addLast,这不就是队列了吗?。除了数组之外,现在又多了一种队列实现方式。

        关于链表的效率: 在头部插入和删除数据很快,因为只需要改变一两个引用值就可以了,所以时间复杂度为O(1),
查找和删除以及在指定链结点插入数据 ,平均起来都需要访问链表中一半的数据,需要进行O(N)次比较,但是不需要移动任何数据,和数组相比,要快很一些。
        初次之外,链表需要多少内存就可以用多少内存,不会造成资源浪费,其不像数组一样初始化完之后大小就固定了,链表可以扩展。(此处不考虑java中的向量,向量的长都扩展其实是数组拷贝,其每一次增容,幅度大小是固定的,这种可扩展个人感觉并不是很好)。

    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值