public void addElement(int data) {
   Node temp = new Node(data);
   if (size == 0) {
     head = temp;
     tail = temp;
     arr[size] = temp;
     size++;
   } else {
     tail.setNextNode(temp);
     temp.setPrevNode(tail);
     tail = temp;
     arr[size] = temp;
     size++;
   }
 }
 public void reverseLinkedList(int start, int end) {
   /*if(start==1&&end==size)
   {
   	Node temp = head;
   	while(temp!=null)
   	{
   		Node temp1 = temp.getNextNode();
   		temp.setNextNode(temp.getPrevNode());
   		temp.setPrevNode(temp1);
   		temp = temp1;
   	}
   	temp = tail;
   	tail  = head;
   	head = temp;
   }
   else
   {
   Node startNode = head;
   Node endNode = head;
   for(int i=1;i<start;i++)
   {
   	startNode=startNode.getNextNode();
   }
   for(int i=1;i<end;i++)
   {
   	endNode=endNode.getNextNode();
   }
   int flag=0;
   while(startNode!=endNode)
   {
   	Node temp1 = startNode.getPrevNode();
   	Node temp2 = startNode.getNextNode();
   	Node temp3 = endNode.getPrevNode();
   	Node temp4 = endNode.getNextNode();
   	startNode.setPrevNode(temp3);
   	startNode.setNextNode(temp4);
   	endNode.setPrevNode(temp1);
   	endNode.setNextNode(temp2);
   if(temp1!=null)	temp1.setNextNode(endNode);
   if(temp4!=null)temp4.setPrevNode(startNode);
   	temp2.setPrevNode(endNode);
   	temp3.setNextNode(startNode);
   	startNode = temp2;
   	endNode = temp3;
   	if((startNode.getNextNode()==endNode&&endNode.getPrevNode()==startNode))
   	{
   		flag=1;
   		break;
   	}
   }
   if(flag==0)
   {
   Node temp1 = startNode.getPrevNode();
   Node temp2 = startNode.getNextNode();
   Node temp3 = endNode.getPrevNode();
   Node temp4 = endNode.getNextNode();
   startNode.setPrevNode(temp3);
   startNode.setNextNode(temp4);
   endNode.setPrevNode(temp1);
   endNode.setNextNode(temp2);
   temp1.setNextNode(endNode);
   temp4.setPrevNode(startNode);
   temp2.setPrevNode(endNode);
   temp3.setNextNode(startNode);
   }
   if(flag==1)
   {
   	Node temp1 = startNode.getPrevNode();
   	Node temp2 = endNode.getNextNode();
   	startNode.setNextNode(temp2);
   	startNode.setPrevNode(endNode);
   	endNode.setPrevNode(temp1);
   	endNode.setNextNode(startNode);
   	temp1.setNextNode(endNode);
   	temp2.setPrevNode(startNode);
   }
   }*/
   Node startNode = head;
   Node endNode = head;
   for (int i = 1; i < start; i++) {
     startNode = startNode.getNextNode();
   }
   for (int i = 1; i < end; i++) {
     endNode = endNode.getNextNode();
   }
   Node pre = startNode.getPrevNode();
   Node nex = endNode.getNextNode();
   Node temp1 = startNode;
   for (int i = 0; i <= (end - start); i++) {
     Node temp2 = temp1.getNextNode();
     temp1.setNextNode(temp1.getPrevNode());
     temp1.setPrevNode(temp2);
     temp1 = temp2;
   }
   /*	if(start==1)
   	startNode.setNextNode();
   pre.setNextNode(endNode);
   endNode.setPrevNode(pre);
   nex.setPrevNode(startNode);
   startNode.setNextNode(nex);*/
   Node t = startNode.getNextNode();
   startNode.setNextNode(endNode.getPrevNode());
   endNode.setPrevNode(t);
   if (start == 1) head = endNode;
   else pre.setNextNode(endNode);
   if (end == size) tail = startNode;
   else nex.setPrevNode(startNode);
 }