Example #1
0
        /// <summary>
        /// Use Hashtable to store the copyList object as we create while going next on originalLL. Use hashtable to restore prev(random) pointer
        /// Time O(n) Space O(n)
        /// </summary>
        /// <param name="linkedList"></param>
        /// <param name="copyList"></param>
        public static void CloneLinkedList(DoublyLinkedList linkedList, DoublyLinkedList copyList)
        {
            Hashtable            linkedObj    = new Hashtable();
            DoublyLinkedListNode llNode       = linkedList.Head;
            DoublyLinkedListNode copyPrevNode = new DoublyLinkedListNode(0);

            while (llNode != null)
            {
                DoublyLinkedListNode copyNode = new DoublyLinkedListNode(llNode.data);
                linkedObj.Add(copyNode.data, copyNode);
                if (copyList.Head == null)
                {//Add first Element
                    copyPrevNode = copyNode;
                    //copyPrevNode.next =
                    copyList.AddNode(copyNode);
                }
                else
                {//
                    copyPrevNode.next = copyNode;
                    copyPrevNode      = copyNode;
                }
                llNode = llNode.next;
            }
            llNode = linkedList.Head;
            DoublyLinkedListNode copyLlNode = copyList.Head;

            while (llNode != null && copyLlNode != null)
            {
                DoublyLinkedListNode copyNode = (DoublyLinkedListNode)linkedObj[llNode.prev.data];
                copyLlNode.prev = copyNode;
                llNode          = llNode.next;
                copyLlNode      = copyLlNode.next;
                //copyList.AddBefore(llNode, copyNode);
            }
        }
Example #2
0
        public static void CloneLinkedListWithNextAndRandomPointerMain()
        {
            DoublyLinkedList     ll    = new DoublyLinkedList();
            DoublyLinkedListNode node1 = new DoublyLinkedListNode(1);
            DoublyLinkedListNode node2 = new DoublyLinkedListNode(2);
            DoublyLinkedListNode node3 = new DoublyLinkedListNode(3);
            DoublyLinkedListNode node4 = new DoublyLinkedListNode(4);

            node1.next = node2;
            node1.prev = node3;
            node2.next = node3;
            node2.prev = node4;
            node3.next = node4;
            node3.prev = node1;
            node4.prev = node2;
            ll.AddNode(node1);
            ll.PrintLL();
            DoublyLinkedList copyLL = new DoublyLinkedList();

            CloneLinkedList(ll, copyLL);
            copyLL.PrintLL();
            copyLL = new DoublyLinkedList();

            CloneLinkedListInConstantSpace(ll, copyLL);
            copyLL.PrintLL();
        }