Esempio n. 1
0
        public void TestMyLinkedList_Add()
        {
            MyLinkedList linkedList = new MyLinkedList();

            MyLinkedList.Node root = new MyLinkedList.Node()
            {
                Data = new { Name = "ROOT" }
            };
            linkedList.Root = root;
            root.Next       = new MyLinkedList.Node()
            {
                Data = new { Name = "1" }
            };
            root.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "2" }
            };
            root.Next.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "3" }
            };

            WriteLinkedList(linkedList);

            MyLinkedList.Node newRoot = new MyLinkedList.Node()
            {
                Data = new { Name = "NEWRoot" }
            };
            linkedList.AddToStart(newRoot);

            WriteLinkedList(linkedList);
        }
Esempio n. 2
0
        public void TestMyLinkedList_MoveN()
        {
            MyLinkedList linkedList = new MyLinkedList();

            MyLinkedList.Node root = new MyLinkedList.Node()
            {
                Data = new { Name = "ROOT" }
            };
            linkedList.Root = root;
            root.Next       = new MyLinkedList.Node()
            {
                Data = new { Name = "1" }
            };
            root.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "2" }
            };
            root.Next.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "3" }
            };

            int n = 2;

            MyLinkedList.Node resultNode = linkedList.MoveN(root, n);
            Assert.AreEqual(n.ToString(), resultNode.Data.Name);

            n          = 100;
            resultNode = linkedList.MoveN(root, n);
            Assert.AreEqual(null, resultNode);
        }
Esempio n. 3
0
        public void TestMyLinkedList_CompareReverse()
        {
            MyLinkedList linkedList = new MyLinkedList();

            MyLinkedList.Node root = new MyLinkedList.Node()
            {
                Data = new { Name = "ROOT" }
            };
            MyLinkedList.Node node = root;
            for (int i = 0; i < 10000; i++)
            {
                node.Next = new MyLinkedList.Node()
                {
                    Data = new { Name = i }
                };
                node = node.Next;
            }
            linkedList.Root = root;

            System.Diagnostics.Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            linkedList.RecursiveReverse(linkedList.Root);

            Console.WriteLine(stopwatch.ElapsedMilliseconds);
            stopwatch.Restart();
            linkedList.Reverse();
            Console.WriteLine(stopwatch.ElapsedMilliseconds);
        }
Esempio n. 4
0
 static MyLinkedList Reverse(MyLinkedList linList)
 {
     MyLinkedList.Node node = linList.head;
     if (node.next == null)
     {
         return(linList);
     }
     MyLinkedList.Node prev = null;
     MyLinkedList.Node next = node.next;
     while (node != null)
     {
         //Save next value
         next = node.next;
         //Next value is now previous node
         node.next = prev;
         //Previous node is now current node
         prev = node;
         //current node is the next node to keep iterating
         if (next != null)
         {
             node = next;
         }
         else
         {
             break; //you finish up the list
         }
     }
     linList.head = node;
     return(linList);
 }
Esempio n. 5
0
        public void TestMyLinkedList_RecursiveReverse()
        {
            MyLinkedList linkedList = new MyLinkedList();

            MyLinkedList.Node root = new MyLinkedList.Node()
            {
                Data = new { Name = "ROOT" }
            };
            linkedList.Root = root;
            root.Next       = new MyLinkedList.Node()
            {
                Data = new { Name = "1" }
            };
            root.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "2" }
            };
            root.Next.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "3" }
            };
            WriteLinkedList(linkedList);


            linkedList.RecursiveReverse(linkedList.Root);

            WriteLinkedList(linkedList);
        }
Esempio n. 6
0
    static void Delete(MyLinkedList linList)
    {
        HashSet <int> dup = new HashSet <int>();

        MyLinkedList.Node node     = linList.head;
        MyLinkedList.Node previous = null;
        MyLinkedList.Node Initial  = null;
        while (node != null)
        {
            if (previous == null)
            {
                Initial = node;
            }
            if (!dup.Contains(node.data))
            {
                dup.Add(node.data);
                previous = node;
            }
            else
            {
                previous.next = node.next;
            }
            node = node.next;
        }
        linList.head = Initial;
        Console.Write("Out: ");
        PrintList(linList.head);
        Console.WriteLine("");
    }
Esempio n. 7
0
 static void PrintList(MyLinkedList linList)
 {
     MyLinkedList.Node node = linList.head;
     while (node != null)
     {
         Console.Write(node.data + " -> ");
         node = node.next;
     }
     Console.WriteLine("");
 }
Esempio n. 8
0
        private static void WriteLinkedList(MyLinkedList linkedList)
        {
            Console.WriteLine("--START--");
            MyLinkedList.Node loopNode = linkedList.Root;
            Console.WriteLine(loopNode.Data.Name);
            while (loopNode.Next != null)
            {
                loopNode = loopNode.Next;
                Console.WriteLine(loopNode.Data.Name);
            }

            Console.WriteLine("--END--");
        }
Esempio n. 9
0
 static void PrintList(MyLinkedList.Node head)
 {
     if (head != null)
     {
         Console.Write(head.data + " ->  ");
     }
     if (head != null)
     {
         if (head.next != null)
         {
             PrintList(head.next);
         }
     }
 }
Esempio n. 10
0
        public void TestMyLinkedList_InsertAfter()
        {
            MyLinkedList linkedList = new MyLinkedList();

            MyLinkedList.Node root = new MyLinkedList.Node()
            {
                Data = new { Name = "ROOT" }
            };
            linkedList.Root = root;
            root.Next       = new MyLinkedList.Node()
            {
                Data = new { Name = "1" }
            };
            root.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "2" }
            };
            root.Next.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "3" }
            };

            WriteLinkedList(linkedList);

            MyLinkedList.Node newNode = new MyLinkedList.Node()
            {
                Data = new { Name = "NEW" }
            };
            linkedList.InsertAfter(root, newNode);

            WriteLinkedList(linkedList);

            MyLinkedList.Node newNode2 = new MyLinkedList.Node()
            {
                Data = new { Name = "NEW2" }
            };
            linkedList.InsertAfter(linkedList.GetLast(root), newNode2);

            WriteLinkedList(linkedList);

            MyLinkedList.Node newNode3 = new MyLinkedList.Node()
            {
                Data = new { Name = "NEW3" }
            };
            linkedList.InsertAfter(newNode, newNode3);

            WriteLinkedList(linkedList);
        }
Esempio n. 11
0
        public void TestMyLinkedList_NthToLast()
        {
            MyLinkedList linkedList = new MyLinkedList();

            MyLinkedList.Node root = new MyLinkedList.Node()
            {
                Data = new { Name = "ROOT" }
            };
            linkedList.Root = root;
            root.Next       = new MyLinkedList.Node()
            {
                Data = new { Name = "1" }
            };
            root.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "2" }
            };
            root.Next.Next.Next = new MyLinkedList.Node()
            {
                Data = new { Name = "3" }
            };

            int n = 2;

            MyLinkedList.Node resultNode = linkedList.NthToLast(n);
            Assert.AreEqual(2.ToString(), resultNode.Data.Name);

            n          = 1;
            resultNode = linkedList.NthToLast(n);
            Assert.AreEqual(3.ToString(), resultNode.Data.Name);

            n          = 3;
            resultNode = linkedList.NthToLast(n);
            Assert.AreEqual("1", resultNode.Data.Name);

            n          = 4;
            resultNode = linkedList.NthToLast(n);
            Assert.AreEqual("ROOT", resultNode.Data.Name);

            n          = 10;
            resultNode = linkedList.NthToLast(n);
            Assert.AreEqual(null, resultNode);
        }
Esempio n. 12
0
    static bool IsCircularList(MyLinkedList linList)
    {
        MyLinkedList.Node node = linList.head;
        if (node.next == null)
        {
            return(false);
        }
        HashSet <int> mySet = new HashSet <int>();

        while (node != null)
        {
            if (!mySet.Contains(node.data))
            {
                mySet.Add(node.data);
            }
            else
            {
                return(true);
            }
            node = node.next;
        }
        return(false);
    }
Esempio n. 13
0
    static int GetValue(MyLinkedList linList, int k)
    {
        Dictionary <int, int> map = new Dictionary <int, int>();

        MyLinkedList.Node node = linList.head;
        int counter            = 0;

        if (node.next == null)
        {
            return(node.data);
        }
        while (node != null)
        {
            map[counter] = node.data;
            node         = node.next;
            if (node != null)
            {
                counter++;
            }
        }
        int index = counter - k;

        return(map[index]);
    }