Индексатор и свойства у односвязаного списка - C#
Формулировка задачи:
Добрый день)
Требуется помощь с добавлением пары функций к уже имеющемуся коду.
1) Добавить индексатор, позволяющий по номеру элемента (индекс) установить и считать его значения.
2)Добавить свойства, позволяющие установить и считать значения первого и последнего элементов списка.
Сам код:
class MyListNode
{
public string Info;
public MyListNode tail;
}
class MyList : IEnumerable<string>
{
private MyListNode list1;
public void AddIndex(string info, int i) //добавление в i позицию
{
var bend = new MyListNode { Info = info };
if (i == 0)
{
bend.tail = list1;
list1 = bend;
}
else
{
var prev = NodeI(i - 1);
bend.tail = prev.tail;
prev.tail = bend;
}
}
public void Clear() //очистка списка
{
list1 = null;
}
public void AddToFront(string info) //добавить в начало
{
var bend = new MyListNode { Info = info };
bend.tail = list1;
list1 = bend;
}
public void RemoveI(int i) //удаление по индексу
{
if (i == 0)
{
list1 = list1.tail;
}
else
{
var prev = NodeI(i - 1);
prev.tail = prev.tail.tail;
}
}
public void RemoveZ(string info) //удаление по значению
{
MyListNode prev = null;
var bend = list1;
while (bend != null)
{
if (bend.Info == info)
{
prev.tail = bend.tail;
break;
}
prev = bend;
bend = bend.tail;
}
}
public MyListNode NodeI(int index) //поиск по индексу
{
var bend = list1;
while (index > 0)
{
bend = bend.tail;
index--;
}
return bend;
}
//Нужно для использования наследования
public IEnumerator<string> GetEnumerator() //индексатор
{
var bend = list1;
while (bend != null)
{
yield return bend.Info;
bend = bend.tail;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}Решение задачи: «Индексатор и свойства у односвязаного списка»
textual
Листинг программы
public T this[int index]
{
get
{
if (index < 0) throw new ArgumentOutOfRangeException();
NodeList<T> current = _head;
for (int i = 0; i < index; i++)
{
if (current.Next == null)
throw new ArgumentOutOfRangeException();
current = current.Next;
}
return current.Value;
}
}