/// <summary> /// /// </summary> /// <param name="num">Начинать с 0</param> public void Remove(int num) { /* получаемый индекс увеличиваем на 1, что бы было удобно считать * Создаем объект головы, curriet * проходимся по ссылкам next в цикле, пока не найдем нужный * при нахождении элемента необходимо прошлому элементу дать next элемент * а следующему элементу дать previous элемент */ num++;//самый первый элемент будет 1 int currietnum = 1; DoubleLinkedNode <T> currietDel = Head; while (currietDel != null && num <= count) { if (num == currietnum) { break; } currietDel = currietDel.Next; currietnum++; } if (currietDel == null || num > count)// если случился худший случай, то выходим { return; } if (num == 1)// отмечены 2 базовых ситуации { /* В голове установим новую ссылку, Head.Next будет батей */ currietDel = currietDel.Next; currietDel.Previous = null; Head = currietDel; } else if (num == count) { currietDel = Tail.Previous; currietDel.Next = null; Tail = currietDel; } else { currietDel.Next.Previous = currietDel.Previous; currietDel.Previous.Next = currietDel.Next; } count--; }
public bool Contains(T data) { DoubleLinkedNode <T> current = Head; while (current != null) { if (current.Data.Equals(data)) { return(true); } current = current.Next; } return(false); }
/// <summary> /// Замена по элементу /// </summary> /// <param name="num"></param> /// <param name="data"></param> public void Substitution(int num, T data) { /* * скопировать Remove и вместо удаления сделать замену Data */ num++;//самый первый элемент будет 1 int currietnum = 1; DoubleLinkedNode <T> currietDel = Head; while (currietDel != null && num <= count) { if (num == currietnum) { break; } currietDel = currietDel.Next; currietnum++; } if (currietDel == null || num > count)// если случился худший случай, то выходим { return; } if (num == 1) { currietDel.Data = data; Head = currietDel; } else if (num == count) { currietDel.Data = data; Tail = currietDel; } else { currietDel.Data = data; } }
public void Add(T data)//работает { /*Создать узел и передать ему значение * Обозначить голову для первого элемента * Задать ссылку на Next прошлому элементу * Задать ссылку на Previous этому элементу * Установить текущий узел как Хвост */ DoubleLinkedNode <T> node = new DoubleLinkedNode <T>(data); if (Head == null) { Head = node; } else { Tail.Next = node; node.Previous = Tail; } Tail = node; count++; }