static void Main(string[] args) { WriteLine(); WriteLine("Recursive Singly Linked List"); WriteLine(); WriteLine("Time & Space Complexity - Worst Case"); WriteLine(); WriteLine("Time Complexity"); WriteLine(); WriteLine("Search - O(n)"); WriteLine(); WriteLine("Insert"); WriteLine("At Begining/ Head - O(1)"); WriteLine("At End/ Tail - O(1)"); WriteLine(); WriteLine("Remove"); WriteLine("At Begining/ Head - O(1)"); WriteLine("At End/ Tail - O(n)"); WriteLine("At A Position/ in between - O(n)"); WriteLine(); WriteLine("Space Complexity - O(n) : for using a call stack for recursive calls."); SinglyLinkedList node = new SinglyLinkedList(); node.AddToEnd(10); node.AddToEnd(20); node.AddToEnd(30); node.AddToBegining(1); node.AddToBegining(2); node.AddToEnd(40); node.Print(); int deleteNode = 2; node.deleteNode(deleteNode); WriteLine(); WriteLine($"After deleting Node {deleteNode}, LinkedList will be -"); WriteLine(); node.Print(); }
/// <summary> /// Exercícios de lista encadeada: /// (a) Recebe um número inteiro e o insere no fim da lista /// (b) Retira o primeiro elemento da lista e o retorna /// (c) Recebe um valor inteiro (x) que é um elemento da lista /// e o uma chave. O método deve inserir o valor da chave após /// o elemento x. Verifique se o elemento passado como parâmetro /// , x, pertence à lista. Caso nãoo exista, informe ao usuário. /// (d) retira todos os elementos cujo campo value é um número /// ímpar. /// (e) Pesquisa por um determinado elemento da lista. Se o elemento /// procurado não existir, informe ao usuário e retorne -1. Caso /// contrário, retorne o valor do elemento. /// (f) Procura e retorna o menor elemento da lista. /// (g) O método recebe uma posição da lista, índice e retira o elemento /// que corresponde à mesma. Seu método deve verificar se o índice é /// válido, sem fazer contagem da quantidade de elementos da lista. Retorne /// o elemento retirado caso o índice seja válido. Caso contrário retorne -1. /// Considere o nó sentinela possuindo o índice 0. /// (h) Todos os métodos devem ser implementados e testados. /// </summary> static void Main(string[] args) { SinglyLinkedList list = new SinglyLinkedList(); list.Insert(1); list.Insert(2); list.Insert(3); list.Insert(4); list.Insert(5); list.Insert(6); list.Insert(7); list.Insert(8); list.Print(); Console.WriteLine(); // (a). list.InsertAfterAll(912); Console.WriteLine("(a)."); list.Print(); Console.WriteLine(); // (b). Console.WriteLine("(b). = " + list.FindRemoveAndReturn(3)); list.Print(); Console.WriteLine(); // (c) Console.WriteLine("(c)."); list.InsertAfter(555, 4); list.Print(); Console.WriteLine(); // (d). Console.WriteLine("(d)."); list.RemoveOdds(); list.Print(); Console.WriteLine(); // (e). Console.WriteLine("(e). = " + list.SearchValue(2)); list.Print(); Console.WriteLine(); // (f). Console.WriteLine("(f). = " + list.Min()); list.Print(); Console.WriteLine(); // (g). Console.WriteLine("(g)."); list.RemoveAt(2); list.Print(); Console.WriteLine(); }
static void Main(string[] args) { #region проверка FindByIndex // var line = Console.ReadLine().Split(); // // var list = new SinglyLinkedList(); // foreach (var item in line) // { // list.PushBack(int.Parse(item)); // } // int beforeLength = line.Length; // var beforePrinted = list.Print(); // // var index = int.Parse(Console.ReadLine()); // var node = list.FindByIndex(index); // Console.WriteLine(node?.Value); // // int afterRemoveLength = list.GetCount(); // if (beforeLength != afterRemoveLength) // throw new Exception("Метод \"FindByIndex\" изменяет кол-во элементов"); // // var afterPrinted = list.Print(); // if (beforePrinted != afterPrinted) // throw new Exception("Метод \"FindByIndex\" изменяет элементы массива"); #endregion #region проверка FindLast // var line = Console.ReadLine().Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries); // // var list = new SinglyLinkedList(); // foreach (var item in line) // { // list.PushBack(int.Parse(item)); // } // // int beforeLength = line.Length; // var beforePrinted = list.Print(); // // var key = int.Parse(Console.ReadLine()); // var node = list.FindLast(key); // Console.WriteLine(node?.Value); // // Console.WriteLine(node?.Next?.Value); // // int afterRemoveLength = list.GetCount(); // if (beforeLength != afterRemoveLength) // throw new Exception("Метод \"FindLast\" изменяет кол-во элементов"); // // var afterPrinted = list.Print(); // if (beforePrinted != afterPrinted) // throw new Exception("Метод \"FindLast\" изменяет элементы массива"); #endregion #region проверка PushBackRange // var line = Console.ReadLine().Split(); // var line2 = Console.ReadLine().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // var array = new int[line2.Length]; // for (int i = 0; i < line2.Length; i++) // { // array[i] = int.Parse(line2[i]); // } // int expectedLength = line.Length + line2.Length; // var list = new SinglyLinkedList(); // foreach (var item in line) // { // list.PushBack(int.Parse(item)); // } // list.PushBackRange(array); // // if (list.GetCount() != expectedLength) // throw new Exception("Кол-во элементво в массиве должна быть равна сумме длин двух массивов."); // // Console.WriteLine(list.Print()); #endregion #region проверка AddBefore // var line = Console.ReadLine().Split(); // var list = new SinglyLinkedList(); // for (int i = 0; i < line.Length; i++) // { // list.PushBack(int.Parse(line[i])); // } // int expectedLength = line.Length + 1; // // int key = int.Parse(Console.ReadLine()); // var node = list.Find(key); // // int item = int.Parse(Console.ReadLine()); // // list.AddBefore(node, item); // // if (list.GetCount() != expectedLength) // throw new Exception("Кол-во элементво в списке после добавления должна быть на 1 больше, чем до добавления."); // // Console.WriteLine(list.Print()); #endregion #region проверка Remove // var line = Console.ReadLine().Split(); // int beforeRemoveLength = line.Length; // var list = new SinglyLinkedList(); // foreach (var item in line) // { // list.PushBack(int.Parse(item)); // } // var itemToRemove = int.Parse(Console.ReadLine()); // var isRemove = list.Remove(itemToRemove); // Console.WriteLine(list.Print()); // // int afterRemoveLength = list.GetCount(); // // if (beforeRemoveLength == afterRemoveLength && isRemove) // throw new Exception("Метод \"Remove\" возвращает неправильное значение"); // // if (beforeRemoveLength != afterRemoveLength && !isRemove) // throw new Exception("Метод \"Remove\" возвращает неправильное значение"); #endregion #region проверка RemoveLast // var line = Console.ReadLine().Split(); // int beforeRemoveLength = line.Length; // var list = new SinglyLinkedList(); // foreach (var item in line) // { // list.PushBack(int.Parse(item)); // } // var itemToRemove = int.Parse(Console.ReadLine()); // var isRemove = list.RemoveLast(itemToRemove); // Console.WriteLine(list.Print()); // // int afterRemoveLength = list.GetCount(); // // if (beforeRemoveLength == afterRemoveLength && isRemove) // throw new Exception("Метод \"RemoveLast\" возвращает неправильное значение"); // // if (beforeRemoveLength != afterRemoveLength && !isRemove) // throw new Exception("Метод \"RemoveLast\" возвращает неправильное значение"); #endregion #region проверка RemoveLast var line = Console.ReadLine().Split(); int beforeRemoveLength = line.Length; var list = new SinglyLinkedList(); foreach (var item in line) { list.PushBack(int.Parse(item)); } var itemToRemove = int.Parse(Console.ReadLine()); var remodedElementsCounts = list.RemoveAll(itemToRemove); Console.WriteLine(list.Print()); int afterRemoveLength = list.GetCount(); if (beforeRemoveLength != afterRemoveLength + remodedElementsCounts) { throw new Exception("Метод \"RemoveAll\" возвращает неправильное значение"); } #endregion }
static void Main(string[] args) { SinglyLinkedList test = new SinglyLinkedList(); Console.WriteLine("Test: "); test.AddFirst(10); test.AddFirst(20); test.AddFirst(30); test.AddFirst(40); Console.WriteLine("Singly Linked List After: AddFirst(10), AddFirst(20), AddFirst(30), AddFirst(40)"); test.Print(); Console.WriteLine(); test.AddLast(50); test.AddLast(60); Console.WriteLine("Singly Linked List After: AddLast(50), AddLast(60)"); test.Print(); Console.WriteLine(); test.Append(70); Console.WriteLine("Singly Linked List After: Append(70)"); test.Print(); Console.WriteLine(); test.DeleteFirst(); test.DeleteFirst(); Console.WriteLine("Singly Linked List After: DeleteFirst() Twice"); test.Print(); Console.WriteLine(); test.DeleteLast(); Console.WriteLine("Singly Linked List After: DeleteLast()"); test.Print(); Console.WriteLine(); test.Insert(4, 3); test.Insert(5, 1); Console.WriteLine("Singly Linked List After: Insert(4,3), Insert(5,1)"); test.Print(); Console.WriteLine(); test.Delete(2); test.Delete(3); Console.WriteLine("Singly Linked List After: Delete(2), Delete(3)"); test.Print(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Error Test: "); Console.WriteLine("No Values Have Been Inserted Into Linked List"); Console.WriteLine(); SinglyLinkedList error = new SinglyLinkedList(); Console.WriteLine("Singly Linked List Error Message After: Print()"); Console.WriteLine(); error.Print(); Console.WriteLine(); Console.WriteLine("Singly Linked List Error Message After: DeleteFirst()"); Console.WriteLine(); error.DeleteFirst(); Console.WriteLine(); Console.WriteLine("Singly Linked List Error Message After: DeleteLast()"); Console.WriteLine(); error.DeleteLast(); Console.WriteLine(); Console.WriteLine("Singly Linked List After Insert(27, 0) With No Values In List"); Console.WriteLine(); Console.WriteLine("AddFirst() Will Be Called Instead: "); Console.WriteLine(); error.Insert(27, 0); error.Print(); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("Singly Linked List Error Message After Delete() Called Twice"); Console.WriteLine(); error.Delete(0); error.Print(); error.Delete(0); }