您的位置:首页 > 编程语言 > Java开发

java双向链表

2016-08-08 14:33 363 查看
既允许向前遍历也允许向后遍历整个链表

public class Link {
public long dData;
public Link next;
public Link previous;

public Link(long d){
dData=d;
}
public void displayLink(){
System.out.print(dData+" ");
}
}


public class DoublyLinkedList {
private Link first;
private Link last;
public DoublyLinkedList(){
first=null;
last=null;
}
public boolean isEmpty(){
return first==null;
}
public void insertFirst(long dd){//insert at front of list
Link link = new Link(dd);
if(isEmpty())
last=link; //link<--last
else
first.previous=first;
link.next=first;
first=link;
}
public void insertLast(long dd){
Link link = new Link(dd);
if(isEmpty())
first=link;
else{
last.next=link;
link.previous=last;
}
last=link;
}
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){
first=null;
}else{
last.previous.next=null;
}
last=last.previous;
return temp;
}
//insert dd just 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 link = new Link(dd);
if(current==last){
link.next=null;
last=link;
}else{
link.next=current.next;
current.next.previous=link;
}
link.previous=current;
current.next=link;
return true;
}
public Link deleteKey(long key){
Link current=first;
while(current.dData!=key){
current=current.next;
if(current==null)
return null;
}
if(current==first){
first=current.next;
}else{
current.previous.next=current.next;
}
if(current==last){
last=current.previous;
}else{
current.next.previous=current.previous;
}
return current;
}
public void displayForward(){
System.out.print("Link(first-->last)");
Link current=first;
while(current!=null){
current.displayLink();
current=current.next;
}
System.out.println("");
}
public void displayBackward(){
System.out.print("Link(last-->first)");
Link current=last;
while(current!=null){
current.displayLink();
current=current.previous;
}
System.out.println("");
}
}


public class DoublyLinkApp {
public static void main(String[] args) {
DoublyLinkedList list=new DoublyLinkedList();
list.insertFirst(22);
list.insertFirst(44);
list.insertFirst(66);

list.insertLast(11);
list.insertLast(33);
list.insertLast(55);

list.displayForward();
list.displayBackward();

list.deleteFirst();
list.deleteLast();
list.displayForward();
list.deleteKey(11);
list.displayForward();
list.insertAfter(22, 77);
list.displayForward();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: