java複習之雙向鏈表

package learn;

public class DoubleLinkList {
    DNode head;
    DNode temp;
    public DoubleLinkList(DNode head) {
        this.head = head;

    }

    public DoubleLinkList() {
        head = new DNode();
    }

    public void addByOrder(DNode dNode){
        temp= head.next;
        DNode flag = new DNode();
        if(temp==null){
            head.next=dNode;
            dNode.pre=head;
            return;
        }
        while(temp!=null){
            if(temp.data>dNode.data){
                break;
            }
            flag=temp;
            temp=temp.next;
        }
        if(temp!=null){
            temp.pre.next=dNode;
            dNode.pre=temp.pre;
            temp.pre=dNode;
            dNode.next=temp;
        }else
        {   flag.next=dNode;//加一個這個臨時變量的變量很重要,可以預防temp在結束時都不滿足,變成指向null退出,去掉空指針異常
            dNode.pre=flag;
        }


    }
    public void  delete(DNode dNode){
        boolean flag=false;
        temp=head.next;
        if(head.next==null){
            return;
        }
        while(true){
            if(temp==null){
                break;
            }
            if(temp.data==dNode.data){
                flag=true;
                break;
            }
            temp=temp.next;
        }
        if(flag==true){
            temp.pre.next=temp.next;
            if(temp.next!=null){
                temp.next.pre=temp.pre;//這裏要對temp進行判斷,是不是最後一個,下邊的else將遍歷完都沒找到的所有情況都概括了
            }
        }else {
            System.out.println("沒這個東西!");
        }


    }
    public void list(){
        if(head.next==null){
            return;
        }
        temp=head.next;
        while (true){
            if(temp==null){
                break;
            }
            System.out.println(temp);
            temp=temp.next;
        }
    }
    public static void main(String[] args) {
        DoubleLinkList doubleLinkList = new DoubleLinkList();
        doubleLinkList.addByOrder(new DNode(4));
        doubleLinkList.addByOrder(new DNode(1));
        doubleLinkList.addByOrder(new DNode(3));
        doubleLinkList.addByOrder(new DNode(6));
        doubleLinkList.list();
        doubleLinkList.delete(new DNode(3));
        doubleLinkList.list();
    }


}

class DNode{
    public int data;
    public DNode pre;
    public DNode next;

    public DNode() {
    }

    public DNode(int data) {
        this.data = data;
    }

    @Override
    public String  toString() {
        return "DNode{" +
                "data=" + data +
                '}';
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章