前篇:单链表
双端链表与单链表十分相似,不同的是它新增一个对尾结点的引用。双端链表不是双向链表。
在单链表中在尾部插入一个结点需要一个个遍历到尾结点再插入,这样的效率太低了,使用双端链表就是否方便了。
实现代码
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->
}
}