详细图文——双端链表

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

实现代码

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->
	}
}
原创文章 234 获赞 1294 访问量 23万+

猜你喜欢

转载自blog.csdn.net/qq_25343557/article/details/83661240