package double_linked_list;

public class doublelinkedlist {
    Node awal;
    Node ahir;
    
    public doublelinkedlist(){
        awal=null;
        ahir=null;
                
    }
    public boolean periksa_isEmpty(){
        return(awal==null)
;    }
    public void insert_dari_Awal(int data){
        Node node= new Node(data);
        if(periksa_isEmpty()){
            ahir=node;
        }else{
            awal.prev=node;
        }
        node.next=awal;
        awal=node;
    }
    public void insert_dari_ahir(int data){
        Node node= new Node(data);
        
        if(periksa_isEmpty()){
            awal=node;
        }else{
            ahir.next=node;
            node.prev=ahir;
        }
        ahir= node;
    }
    public Node hapus_data_awal(){
        Node temp =awal;
        if(awal.next == null)
            ahir=null;
        else
            awal.next.prev=null;
        awal=awal.next;
        return temp;
    }   
    public Node hapus_data_ahir(){
        Node temp= ahir;
        if(awal.next==null)
            awal=null;
        else
            ahir.prev.next=null;
        ahir =ahir.prev;
        return temp;
    }
    
    public boolean inser_data_tengah(int key, int data){
        Node current= awal;
        while(current.data != key){
            current =current.next;
            if(current==null)
                return false;
        }
        Node node =new Node(data);
        
        if(current==ahir){
            node.next=null;
            ahir=node;
        }else{
            node.next=current.next;
            current.next.prev=node;
        }
        node.prev= current;
        current.next=node;
        return true;
    }
    public Node hapus_key(int key){
        Node current =awal;
        while(current.data != key){
            current=current.next;
            if(current==null)
                return null;
        }
        if (current==awal)
            awal =current.next;
        else
            current.prev.next=current.next;
        if(current==ahir)
            ahir=current.next.prev;
        else
            current.next.prev=current.prev;
            return current;
        
    }
    public void tampil_awal_ahir(){
        System.out.print("Data (awal-->ahir):");
        Node current=awal;
        while(current != null){
            current.tampil();
            current=current.next;
        }
        System.out.println("");
        
    }
    public void tampil_ahir_awal(){
        System.out.print("Data (ahir-->awal):");
        Node current=ahir;
        while(current != null){
            current.tampil();
            current=current.prev;
        }
        System.out.println("");
        
    }
    
}