public void InsertAt(DoubleNode <T> node, T value) { var newNode = new DoubleNode <T>(value); newNode.Previous = node; newNode.Next = node.Next; if (node.Next != null) { node.Next.Previous = newNode; } node.Next = newNode; }
public void Append(T value) { var newNode = new DoubleNode <T>(value); if (Head is null) { Head = newNode; } else { var last = Traverse((l, n) => false); last.Next = newNode; newNode.Previous = last; } }
public DoubleNode <T> Traverse(Func <DoubleNode <T>, DoubleNode <T>, bool> findFn) { var current = Head; DoubleNode <T> previous = null; while (current != null) { var result = findFn(previous, current); previous = current; current = current.Next; if (result) { break; } } return(previous); }
public void Remove(DoubleNode <T> node) { if (Head.Value.Equals(node.Value)) { Head = Head.Next; } else { if (node.Previous != null) { node.Previous.Next = node.Next; } if (node.Next != null) { node.Next.Previous = node.Previous; } } }