Ejemplo n.º 1
0
 public void RemoveStart()
 {
     if (Head != null)
     {
         Head = Head.next;
     }
 }
Ejemplo n.º 2
0
        public void ReadAll()
        {
            RNode <T> curr = Head;

            while (curr != null)
            {
                Console.WriteLine(curr.data + " : " + curr.rand.data);
                curr = curr.next;
            }
        }
Ejemplo n.º 3
0
        //Insert in the begining
        public void AddStart(T data)
        {
            RNode <T> newNode = new RNode <T>();

            newNode.data = data;

            newNode.next = Head;
            Head         = newNode;
            newNode.rand = GetRandomNode();
        }
Ejemplo n.º 4
0
        public void SetRandomNodes()
        {
            RNode <T> curr = Head;

            while (curr != null)
            {
                curr.rand = GetRandomNode();
                curr      = curr.next;
                Thread.Sleep(1000);
            }
        }
Ejemplo n.º 5
0
        //Clone a linked list with Random Ptr
        public static RNode <T> CloneRandomPtrList(RNode <T> Head)
        {
            if (Head != null)
            {
                RNode <T> curr = Head;

                while (curr != null)
                {
                    RNode <T> temp = new RNode <T>();
                    temp.data = curr.data;
                    temp.next = curr.next;
                    curr.next = temp;

                    curr = curr = temp.next;
                }

                curr = Head;

                while (curr != null)
                {
                    curr.next.rand = curr.rand.next;
                    curr           = curr.next.next;
                }

                curr = Head;
                RNode <T> copy  = Head.next;
                RNode <T> temp1 = copy;
                while (curr != null)
                {
                    if (curr.next != null)
                    {
                        curr.next = curr.next.next;
                    }
                    if (temp1.next != null)
                    {
                        temp1.next = temp1.next.next;
                    }

                    curr  = curr.next;
                    temp1 = temp1.next;
                }
                return(copy);
            }
            return(null);
        }
Ejemplo n.º 6
0
        public void RemoveEnd()
        {
            if (Head != null)
            {
                RNode <T> curr = Head;

                if (curr.next == null)
                {
                    Head = null;
                    return;
                }

                while (curr.next.next != null)
                {
                    curr = curr.next;
                }

                curr.next = null;
            }
        }
Ejemplo n.º 7
0
        public void AddEnd(T data)
        {
            RNode <T> newNode = new RNode <T>();

            newNode.data = data;

            if (Head == null)
            {
                Head = newNode;
            }
            else
            {
                RNode <T> curr = Head;

                while (curr.next != null)
                {
                    curr = curr.next;
                }
                curr.next = newNode;
            }
            newNode.rand = GetRandomNode();
        }
Ejemplo n.º 8
0
        private RNode <T> GetRandomNode()
        {
            int       length = 0;
            RNode <T> curr   = Head;

            while (curr != null)
            {
                curr = curr.next;
                length++;
            }

            Random obj = new Random();
            int    randomNodeNumber = obj.Next(length);

            curr = Head;

            for (int i = 0; i < randomNodeNumber; i++)
            {
                curr = curr.next;
            }

            return(curr);
        }