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); }
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); }
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); }
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); }
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); }
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(""); }
static void PrintList(MyLinkedList linList) { MyLinkedList.Node node = linList.head; while (node != null) { Console.Write(node.data + " -> "); node = node.next; } Console.WriteLine(""); }
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--"); }
static void PrintList(MyLinkedList.Node head) { if (head != null) { Console.Write(head.data + " -> "); } if (head != null) { if (head.next != null) { PrintList(head.next); } } }
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); }
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); }
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); }
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]); }