예제 #1
0
        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);
            }
        }
예제 #2
0
        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());
        }
예제 #3
0
        ///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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
            }
        }
예제 #6
0
        ///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));
        }
예제 #7
0
        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());
        }