public DoubleLinkedNode(T value, IDoubleLinkedNode <T> next, IDoubleLinkedNode <T> prev) { if (value == null) { throw new ArgumentNullException(nameof(value)); } Value = value; Next = next; Prev = prev; }
public bool Contains(T value) { IDoubleLinkedNode <T> currentNode = First; while (currentNode != null) { if (currentNode.Value.CompareTo(value) == 0) { return(true); } currentNode = currentNode.Next; } return(false); }
public void Reverse() { IDoubleLinkedNode <T> currentNode = First; while (currentNode != null) { IDoubleLinkedNode <T> tempNode = currentNode.Next; currentNode.Next = currentNode.Prev; currentNode.Prev = tempNode; currentNode = tempNode; } currentNode = Last; Last = First; First = currentNode; }
public void Reverse() { IDoubleLinkedNode <T> next, node = First; while (node != null) { // Меняем ссылки местами: следующий узел станет предыдущим, предыдущий станет следующим next = node.Next; node.Next = node.Prev; node.Prev = next; node = next; } // Меняем ссылку на первый и последний узел местами node = First; First = Last; Last = node; }
public void AddLast(T value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } IDoubleLinkedNode <T> prev = Last; Last = new DoubleLinkedNode <T>(value, null, prev); if (prev != null) { prev.Next = Last; } First ??= Last; }
public void AddFirst(T value) { if (value == null) { throw new ArgumentNullException(nameof(value)); } IDoubleLinkedNode <T> next = First; First = new DoubleLinkedNode <T>(value, next, null); if (next != null) { next.Prev = First; } Last ??= First; }
public T this[int i] { get { if (i > Count - 1 || i < 0) { throw new ArgumentOutOfRangeException(); } int counter = 0; IDoubleLinkedNode <T> currentNode = First; while (counter != i) { currentNode = currentNode.Next; counter++; } return(currentNode.Value); } }