最近貌似比较忙,还是先上代码吧,之后做解释
双端链表,顾名思义就是头结点指向下一个节点,也指向尾节点
package link;
public class FirstLastLinkList {
private Node first; //头结点
private Node last; //尾节点
/**
* 头结点插入一个节点从
*/
public void insertFirstNode(long value){
Node node = new Node(value);
if(isEmpty()){
last = node;
}
node.next = first;
first = node;
}
/**
* 从尾节点插入一个节点
*/
public void insertLastNode(long value){
Node node = new Node(value);
if(isEmpty()){
first = node;
}else{
last.next = node;
}
last = node;
}
/**
* 显示链表
*/
public void display(){
Node current = first;
while(current != null){
current.display();
current = current.next;
}
System.out.println();
}
/**
* 删除一个节点
*/
public void deleteFirst(){
if(first == null) return;
Node tmp = first;
if(first.next == null){
last = null;
}
first = tmp.next;
}
/**
* 查找节点
*/
public Node find(long value){
Node current = first;
while(current.data != value){
if(current.next == null){
return null;
}
current = current.next;
}
return current;
}
/**
* 根据值删除节点
*/
public void delete(long value){
Node current = first;
Node tmp = first;
while(current.data != value){
if(current.next == null){
return;
}
tmp = current;
current = current.next;
}
if(current == first){
first = current.next;
}else{
tmp.next = current.next;
}
}
public boolean isEmpty(){
return (first == null);
}
}