public void Replace(DoublyLinkedNode <T> node, T value) { if (node is null) { throw new ArgumentNullException(nameof(node)); } PracticeExtensions.ThrowIfNull(value, nameof(value)); var nodeIsFirst = ReferenceEquals(First, node); var nodeIsLast = ReferenceEquals(Last, node); if (nodeIsFirst) { var newNode = First.Replace(value); First = newNode; } if (nodeIsLast) { var newNode = Last.Replace(value); Last = newNode; } if (!nodeIsFirst && !nodeIsLast) { node.Replace(value); } }
internal DoublyLinkedNode <T> LinkBefore(T value) { PracticeExtensions.ThrowIfNull(value, nameof(value)); var newNode = new DoublyLinkedNode <T>(value); ReplacePrevious(newNode); newNode.Next = this; return(newNode); }
internal DoublyLinkedNode <T> Replace(T value) { PracticeExtensions.ThrowIfNull(value, nameof(value)); var replacement = new DoublyLinkedNode <T>(value); ReplacePrevious(replacement); ReplaceNext(replacement); return(replacement); }
public void AddFirst(T value) { PracticeExtensions.ThrowIfNull(value, nameof(value)); if (First is null) { SetFirstNode(value); } else { First = First.LinkBefore(value); } Count++; }
public DoublyLinkedNode(T value) { PracticeExtensions.ThrowIfNull(value, nameof(value)); Value = value; }