private static void DeleteDublicateCharFromList(char ch, VLinkedList <char> list) { var node = list.Find(ch); VLinkedList <char> .Node last = list.FindLast(ch); while (node != last) { list.Delete(last); last = list.FindLast(ch); } }
public void Test_LinkedList_Delete() { var list = new VLinkedList <int>(); list.Add(1); list.Add(2); list.Add(3); Assert.Equal(3, list.Count()); Assert.Equal(1, list.First()); Assert.Equal(3, list.Last()); list.Delete(4); Assert.Equal(3, list.Count()); Assert.Equal(1, list.First()); Assert.Equal(3, list.Last()); list.Delete(2); Assert.Equal(2, list.Count()); Assert.Equal(1, list.First()); Assert.Equal(3, list.Last()); list.Delete(1); Assert.Equal(1, list.Count()); Assert.Equal(3, list.First()); Assert.Equal(3, list.Last()); list.Delete(3); Assert.Equal(0, list.Count()); Assert.Equal(0, list.First()); Assert.Equal(0, list.Last()); list.Add(4); list.Add(5); list.Add(6); Assert.Equal(3, list.Count()); Assert.Equal(4, list.First()); Assert.Equal(6, list.Last()); list.Delete(4); Assert.Equal(2, list.Count()); Assert.Equal(5, list.First()); Assert.Equal(6, list.Last()); list.Delete(6); Assert.Equal(1, list.Count()); Assert.Equal(5, list.First()); Assert.Equal(5, list.Last()); list.Delete(5); Assert.Equal(0, list.Count()); Assert.Equal(0, list.First()); Assert.Equal(0, list.Last()); }
///2.2. Реализуйте алгоритм для нахождения в односвязном списке k-го элемента с конца. public static T GetElementFromEnd <T>(VLinkedList <T> list, int numFromEnd) { var realNum = list.Count() - numFromEnd; var node = list.FirstNode(); for (int i = 0; i < realNum - 1; i++) { node = node.Next; } return(node.Value); }
public void Test_GetElementFromEnd() { var list = new VLinkedList <char>(); list.Add("abcdefg".ToCharArray()); var ch = Chapter2LinkedLists.GetElementFromEnd(list, 0); Assert.Equal('g', ch); ch = Chapter2LinkedLists.GetElementFromEnd(list, 6); Assert.Equal('a', ch); ch = Chapter2LinkedLists.GetElementFromEnd(list, 3); Assert.Equal('d', ch); }
public void Test_LinkedList_Enumerate() { var list = new VLinkedList <int>(); list.Add(1); list.Add(2); list.Add(3); var j = 1; foreach (var i in list) { Assert.Equal(j++, i); } }
///2 . 1 . Напишите код для удаления дубликатов из не сортированного связного списка. ///Дополнительно: Как вы будете решать задачу, если использовать временный буфер запрещено? public static string DeleteDublicate(string input) { var list = new VLinkedList <char>(); foreach (var ch in input) { list.Add(ch); } foreach (var ch in list) { DeleteDublicateCharFromList(ch, list); } return(list.Aggregate("", (first, next) => first + next)); }
public void Test_LinkedList_Add() { var list = new VLinkedList <int>(); Assert.Equal(0, list.Count()); list.Add(1); Assert.Equal(1, list.Count()); Assert.Equal(1, list.First()); Assert.Equal(1, list.Last()); list.Add(2); Assert.Equal(2, list.Count()); Assert.Equal(1, list.First()); Assert.Equal(2, list.Last()); list.Add(3); Assert.Equal(3, list.Count()); Assert.Equal(1, list.First()); Assert.Equal(3, list.Last()); }