在双端基础上
//双向链表
public class LinkList2 {
//车头
private Node first;
//车尾
private Node last;
//默认构造方法
public LinkList2(){
first=null;
last=null;
}
//插入一个节点,在头结点后进行插入
public void insertFirst (int value){
Node node = new Node(value);
if(isEmpty()){
last=node;
}else{
first.previous=node;
}
node.next=first;
first=node;
//注意先后步骤 //倒着插入
}
//删除一个结点,在头结点后进行删除
public Node deleteFirst(){
Node tmp = first;
if(first.next==null){
last = null;
}else{
first.next.previous=null;
}
first=tmp.next;
return tmp;
}
//删除结点,从尾部进行删除
public Node deleteLast(){
Node tmp = last;
if(first.next==null){
first = null;
}else{
last.previous.next=null;
last = last.previous;
}
return last;
}
//插入一个结点,从尾结点插入
public void insertLast(int value){
Node node = new Node (value);
if(isEmpty()){
first = node;
}else{
last.next=node;
}
node.previous=last;
last = node;
}
//显示方法
public void display(){
Node current = first;
while(current!=null){
current.display();
current = current.next;
}
System.out.println();
}
//查找方法
public Node find (int value){
Node current = first;
while(current.data!=value){
if(current.next==null){
return null;
}
current = current.next;
}
return current;
}
//删除方法,根据数据域进行删除
public Node delete(int value){
Node current = first;
while(current.data!=value){
if(current.next==null){
return null;
}
current = current.next;
}
if(current==first){
first = first.next;
}else{
current.previous.next=current.next;
}
return current;
}
//判断是否为空
public boolean isEmpty(){
return (first==null);
}
}