Beispiel #1
0
        private SLLNodeRandom Clone(SLLNodeRandom head)
        {
            Dictionary <SLLNodeRandom, SLLNodeRandom> map = new Dictionary <SLLNodeRandom, SLLNodeRandom>();
            SLLNodeRandom current   = head;
            SLLNodeRandom cloneHead = null;

            while (current != null)
            {
                SLLNodeRandom cloneNode = new SLLNodeRandom(current.Value);

                if (cloneHead == null)
                {
                    cloneHead = cloneNode;
                }

                map.Add(current, cloneNode);
                current = current.Next;
            }

            while (head != null)
            {
                if (head.Next != null)
                {
                    map[head].Next = map[head.Next];
                }
                if (head.Random != null)
                {
                    map[head].Random = map[head.Random];
                }

                head = head.Next;
            }

            return(cloneHead);
        }
Beispiel #2
0
        public void Clone()
        {
            SLLNodeRandom head  = new SLLNodeRandom(1);
            SLLNodeRandom node2 = new SLLNodeRandom(2);
            SLLNodeRandom node3 = new SLLNodeRandom(3);
            SLLNodeRandom node4 = new SLLNodeRandom(4);

            head.Next    = node2;
            head.Random  = node3;
            node2.Next   = node3;
            node2.Random = node4;
            node3.Next   = node4;
            node3.Random = node3;
            node4.Next   = null;
            node4.Random = null;

            SLLNodeRandom node = Clone(head);
        }