Sunday, March 23, 2014

Implement a DoublyLinkedList in Java

Please go through the below code to understand the implementation

package test.sachi.dsnalgos.doubleLinkedList;

public class Node {

protected Node next;
protected Node prev;
protected int data;

public Node(){

next=null;
prev=null;
data=0;
}


public Node(int d,Node n, Node p){

next=n;
prev=p;
data=d;
}

public void setNextlink(Node n){
next=n;

}
public void setPrevlink(Node p){
prev=p;

}
public Node getNextLink(){
return next;
}

public Node getPrevLink(){
return prev;
}
public void setData(int d)
    {
        data = d;
    }
public int getData()
    {
        return data;
    }

}


package test.sachi.dsnalgos.doubleLinkedList;

public class DoublyLinkedList {

protected Node start;
protected Node end;
int size;

public DoublyLinkedList(){
start=null;
end=null;
size=0;
}

public boolean isEmpty(){
if(start !=null){
return false;
}else{
return true;
}
}

public int getSize(){
return size;

}

public void insertAtStart(int val){
Node nodePtr=new Node(val,null,null);
if(start==null){
start=nodePtr;
end=start;

}else{
start.setPrevlink(nodePtr);
nodePtr.setNextlink(start);
start=nodePtr;

}
size++;

}

public void insertAtEnd(int val){
Node nodePtr=new Node(val,null,null);
if(start==null){
start=nodePtr;
end=start;

}else{
nodePtr.setPrevlink(end);
end.setNextlink(nodePtr);
end=nodePtr;

}
size++;

}

public void insertAtPosition(int val , int pos)
{
Node nptr = new Node(val, null, null);    
if (pos == 1)
{
insertAtStart(val);
return;
}            
Node ptr = start;
for (int i = 2; i <= size; i++)
{
if (i == pos)
{
Node tmp = ptr.getNextLink();
ptr.setNextlink(nptr);
nptr.setPrevlink(ptr);
nptr.setNextlink(tmp);
tmp.setPrevlink(nptr);
}
ptr = ptr.getNextLink();            
}
size++ ;
}

public void deleteAtPosition(int pos){
if(pos==1){

if(size==1){
start=null;
end=null;
size=0;
return;

}
start=start.getNextLink();
start.setPrevlink(null);
size--;
return;

}
if(pos==size) {
end=end.getPrevLink();
end.setNextlink(null);
size--;
}
Node tmpPtr=start.getNextLink();
for(int i=2;i<=size;i++){
if(i==pos){
Node p=tmpPtr.getPrevLink();
Node n=tmpPtr.getNextLink();
p.setNextlink(n);
n.setPrevlink(p);
size--;
return;


}
tmpPtr=tmpPtr.getNextLink();
}



}

public void displayDL(){
System.out.print("\nDoubly Linked List = ");
if (size == 0) {
System.out.print("empty\n");
return;
}
if(start.getNextLink()==null){
System.out.println(start.getData() );
return;
}
Node nodePtr=start;
System.out.print(start.getData()+ " <-> ");
while(nodePtr.getNextLink() !=null){
System.out.print(nodePtr.getData()+ " <-> ");
nodePtr = nodePtr.getNextLink();
        }
System.out.print(nodePtr.getData()+ "\n");
}


}




No comments:

Post a Comment