public RandomListNode copyRandomList(RandomListNode head) {
//        LinkedList.printList("Source List1 : ",head);
        if(head == null ) return null;
        RandomListNode rln;
        RandomListNode p = head;
//        LinkedList.printList("Source List : ",head);
        while(p.next != null)
        {
            rln = new RandomListNode(p.label);
            rln.next = p.next;
            p.next = rln;
            p = p.next.next;
        }
        rln = new RandomListNode(p.label);
        p.next = rln;
        p = head;
//        LinkedList.printList("After Copy1  : ",head);
        RandomListNode newH = head.next;
//        LinkedList.printList("Insert New List : ",head);
        while(p != null)
        {
           if(p.random != null)
           p.next.random = p.random.next;
           p = p.next.next;
        }
//        LinkedList.printList("Source List1 : ",head);
        p = newH;
        RandomListNode pp = head;
        while(p.next != null)
        {
            pp.next = p.next;
            pp = pp.next;
            p.next = pp.next;
            p = p.next;
        }
        pp.next = null;
//        LinkedList.printList("After recover  : ",newH);
//        LinkedList.printList("After recover  : ",newH);
        return newH;
    }