package day1_30_5_2;
public class DoubleLinkedList {
private Link first;
private Link last;
public DoubleLinkedList(){
first = null;
last = null;
}
//判断是不是为空
public boolean isEmpty(){
return first == null;
}
//在双向链表的前端插入
public void insertFirst(long dd){
Link newLink = new Link(dd);
if(isEmpty()){//如果双向链表为空,就让last指针直接指向新创建的节点
last = newLink;
}else
first.previous = newLink;
newLink.next = first;
first = newLink;
}
//在双向链表的后端插入
public void insertLast(long dd){
Link newLink = new Link(dd);
if(isEmpty()){
first = newLink;
}else{
last.next = newLink;
newLink.previous = last;
}
last = newLink;
}
//删除第一个节点的实现
public Link deleteFirst(){
Link temp = first;
if(first.next == null){//如果只有一个元素
last = null;
}
else
first.next.previous = null;
first = first.next;
return temp;
}
//删除最后一个节点的实现
public Link deleteLast(){
Link temp = last;
if (first.next == null) // if only one item
first = null; // first --> null
else
last.previous.next = null; // old previous --> null
last = last.previous; // old previous <-- last
return temp;
}
//在某个元素的后面添加一个元素,insert dd after key
public boolean insertAfter(long key,long dd){
Link current = first;
while(current.dData != key){
current = current.next;
if(current == null){
return false;
}
}
//创建一个新的节点
Link newLink = new Link(dd);
//current 在last
if(current == last){
newLink.next = null;
last = newLink;
}else{//不是最后一个节点
newLink.next = current.next;
current.next.previous = newLink;
}
newLink.previous = current;
current.next = newLink;
return true;
}
public Link deleteKey(long key){
Link current = first; // start at beginning
while (current.dData != key) // until match is found,
{
current = current.next; // move to next link
if (current == null)
return null; // didn't find it
}
if (current == first) // found it; first item?
first = current.next; // first --> old next
else
// not first
// old previous --> old next
current.previous.next = current.next;
if (current == last) // last item?
last = current.previous; // old previous <-- last
else
// not last
// old previous <-- old next
current.next.previous = current.previous;
return current; // return value
}
public void displayForward() {
System.out.print("List (first-->last): ");
Link current = first; // start at beginning
while (current != null) // until end of list,
{
current.displayLink(); // display data
current = current.next; // move to next link
}
System.out.println("");
}
// -------------------------------------------------------------
public void displayBackward() {
System.out.print("List (last-->first): ");
Link current = last; // start at end
while (current != null) // until start of list,
{
current.displayLink(); // display data
current = current.previous; // move to previous link
}
System.out.println("");
}
}