Monday, October 13, 2014

Implement Queue using doubly linkedlist

// Implementation of Queue using doubly linkedlist


class QNode{
 int val;
 QNode next, prev;
 
 public QNode(int val)
 {
  this.val = val;
  this.next = this.prev = null;
 }
 
}

class Queue{
 
 private QNode front, rear, middle;
 private int count;

 void enqueue(int d)
 {
  QNode node = new QNode(d);
  count++;
  if(isEmpty())
  {
   front = rear = middle = node;
  }else{
   rear.next = node;
   node.prev = rear;
   rear = rear.next;
   if((count&1) == 1) middle = middle.next;
   
  }
   
 }
 
 
 int dequeue()
 {
  int r = -1;
  if(!isEmpty())
  {
   if(front == rear)
   {
    r = front.val;
    front = rear = middle = null;
    count--;
   }else{
    r = front.val;
    front = front.next;
    count--;
   }
   
   if((count & 1) != 0 && middle != null) 
   {
    middle = middle.next;
    }
  }
  return r;
 }
 
 int middleElement()
 {
  if(!isEmpty())
   return middle.val;
  return -1;
 }
 
 void deleteElement()
 {
  
  if(middle.prev == null && front != null)
  {
   System.out.println("Deleted:"+middle.val);
   front = front.next;
   if(front != null){
    front.prev = null;
    middle = front;
   }
   count--;
  }else     
  if(middle != null)
  {
   System.out.println("Deleted:"+middle.val);
   middle.prev.next = middle.next;
   middle.next.prev = middle.prev;
   count--;
   if((count & 1) != 0 && middle != null) //odd
   {
    middle = middle.next;
   }else
   {
    middle = middle.prev;
   }
  }
 }
 
 
 boolean isEmpty()
 {
  if(front == null) return true;
  return false;
 }
 
 
 public static void main(String args[])
 {
  Queue q = new Queue();
  q.enqueue(2);
  q.enqueue(5);
  q.enqueue(6);
  q.enqueue(8);
  
  //System.out.println(q.middleElement());
  q.deleteElement();
  q.deleteElement();
  q.deleteElement();
  q.deleteElement();
  System.out.println(q.middleElement());
 }
 
}

Sunday, October 12, 2014

Merge a linked list into another linked list at alternate positions

// Merging Two list into single List

 public static ListNode mergeList(ListNode h1, ListNode h2)
 {
  if(h1==null && h2 == null) return null;
  ListNode c1,c2, t1,t2;
  for(c1 = h1, c2 = h2; c1!=null && c2!=null; )
  {
   t1 = c1.next;
   t2 = c2.next;
   
   c2.next = c1.next;
   c1.next = c2;
   
   c1 = t1;
   c2 = t2;
  }
  
  if(c1 == null)
   h2 = c2;
  else
   h2 = null;
   
  return h2;
 }