java双向链表

来源:互联网 发布:淘宝客恶意骗佣金 编辑:程序博客网 时间:2024/06/15 20:26

既允许向前遍历也允许向后遍历整个链表

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();    }}
0 0