详细图文——双端链表

前篇:单链表
       双端链表与单链表十分相似,不同的是它新增一个对尾结点的引用。双端链表不是双向链表。
双端链表图示
       在单链表中在尾部插入一个结点需要一个个遍历到尾结点再插入,这样的效率太低了,使用双端链表就是否方便了。

实现代码

Link类:
public class Link {
	public long data;
	public Link next;
	
	public Link(long data){
		this.data = data;
	}
	
	public void displayLink(){
		System.out.print(data + "->");
	}
}
FirstLastList类:
package shuangduanlianbiao;

public class FirstLastList {

	private Link first;
	private Link last;
	
	public FirstLastList(){
		first = null;
		last = null;
	}
	
	/**
	 * 判断链表是否为空
	 * @return boolean
	 */
	public boolean isEmpty(){
		return first == null;
	}
	
	/**
	 * 从头部插入
	 */
	public void insertFirst(long data){
		Link newNode = new Link(data);
		if(isEmpty())
			last = newNode;
		newNode.next = first;
		first = newNode;
	}
	
	/**
	 * 从尾部插入
	 */
	public void insertLast(long data){
		Link newNode = new Link(data);
		if(isEmpty())
			first = newNode;
		else
			last.next = newNode;
		last = newNode;
	}
	
	/**
	 * 删除第一个节点
	 * @return oldval {删除的结点值}
	 */
	public long deleteFirst(){
		long oldVal = first.data;
		if(first.next==null){
			last = null;
		}
		first = first.next;
		return oldVal;
	}
	
	/**
	 * 双端链表的遍历
	 */
	public void displayList(){
		Link curr = first;
		while(curr!=null){
			curr.displayLink();
			curr = curr.next;
		}
		System.out.println();
	}
}
Test类
public class TestMain {
	public static void main(String[] args) {
		FirstLastList list = new FirstLastList();
		list.insertFirst(1);
		list.insertFirst(2);
		list.insertFirst(3);
		
		list.insertLast(4);
		list.insertLast(5);
		list.insertLast(6);
		
		list.displayList();//3->2->1->4->5->6->
		
		list.deleteFirst();
		list.displayList();//2->1->4->5->6->
	}
}
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值