您的位置:首页 > 其它

双向链表

2016-03-10 15:43 253 查看
public class Link {
public long dData;
public Link next;
public Link previous;

public Link(long dData){
this.dData=dData;
}

public void displayLink(){
System.out.print(dData+" ");
}
}


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=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(){//delete first link
Link temp =first;
if(first.next==null){//if only one items
last=null;
}else{
first.next.previous=null;
}
first=first.next;
return temp;
}

public Link deleteLast(){//delete last link
Link temp =last;
if(first.next==null){//if only one items
first=null;
}else{
last.previous.next=null;
}
last=last.previous;
return temp;
}

public boolean insertAfter(long key,long dd){
Link current =first;
while(current.dData!=key){
current=current.next;
if(current==null){
return false;//didn't find it
}
}
Link newLink = new Link(dd);
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;
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(){
Link current=first;
while(current!=null){
current.displayLink();
current=current.next;
}
System.out.println("");
}
//遍历
public void displayBackward(){
Link current = last;//start at end
while(current!=null){
current.displayLink();
current=current.previous;
}
System.out.println("");
}
//insertAfter在某一特定元素后面插入
}


public class DoubleLinkedApp {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DoubleLinkedList theList = new DoubleLinkedList();
theList.insertFirst(22);
theList.insertFirst(44);
theList.insertFirst(66);
theList.insertLast(11);
theList.insertLast(33);
theList.insertLast(55);
theList.displayForward();
theList.displayBackward();
theList.deleteFirst();
theList.deleteLast();
theList.displayForward();
theList.insertAfter(22, 77);
theList.insertAfter(33, 88);
theList.displayForward();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  双向链表