Ejemplo n.º 1
0
        /// <summary>
        /// Create copyLL node in between of OriginalLL node and iterate two steps to set the right prev(random) path.
        /// Time O(n) Space O(1)
        /// </summary>
        /// <param name="originalLL"></param>
        /// <param name="copyLL"></param>
        public static void CloneLinkedListInConstantSpace(DoublyLinkedList originalLL, DoublyLinkedList copyLL)
        {
            DoublyLinkedListNode originalLLNode = originalLL.Head;
            DoublyLinkedListNode copyLLNode     = null;

            while (originalLLNode != null)
            {//Iterate original LL
                copyLLNode          = new DoublyLinkedListNode(originalLLNode.data * -1);
                copyLLNode.next     = originalLLNode.next;
                originalLLNode.next = copyLLNode;
                originalLLNode      = originalLLNode.next.next; // Move 2 steps ahead
            }
            //Each Copy Node is added between each original Node
            originalLLNode = originalLL.Head;
            while (originalLLNode != null)
            {//Set prev (Random) node value and seperate two lists.
                //Original next is Copy LLNode so use that to update prev of Copy LL node
                originalLLNode.next.prev = originalLLNode.prev.next;
                originalLLNode           = originalLLNode.next.next;
            }
            originalLLNode = originalLL.Head;
            //Set CopyList Head
            copyLL.Head = originalLLNode.next;
            copyLLNode  = copyLL.Head;
            while (originalLLNode != null)
            {//Seperate Original and CopyList
                originalLLNode.next = originalLLNode.next.next;
                if (copyLLNode.next != null)
                {
                    copyLLNode.next = copyLLNode.next.next;
                }
                else
                {
                    copyLLNode.next = null;
                }
                originalLLNode = originalLLNode.next;
                copyLLNode     = copyLLNode.next;
            }
        }
Ejemplo n.º 2
0
 public LRUCache(int capcity)
 {
     Capcity          = capcity;
     dic              = new Dictionary <K, Node <K, V> >();
     doublyLinkedList = new DoublyLinkedList <K, V>();
 }