public SimpleLinkedLisNode <T> AddFirst(T element) { var newNode = new SimpleLinkedLisNode <T> { Value = element }; if (Count == 0) { First = Last = newNode; } else { newNode.Next = First; First = First.Previous = newNode; } if (++Count == 2) { Last = newNode.Next; } OnNodeAdded(newNode); return(newNode); }
protected virtual void OnNodeAdded(SimpleLinkedLisNode <T> node) { if (NodeAdded != null) { NodeAdded(node); } }
public void RemoveAfter(SimpleLinkedLisNode <T> node) { if (node == null || node.Next == null) { throw new ArgumentNullException(); } if (node.Next.Next == null) { RemoveLast(); } else { node.Next = node.Next.Next; node.Next.Previous = node; } }
public void RemoveBefore(SimpleLinkedLisNode <T> node) { if (node == null || node.Previous == null) { throw new ArgumentNullException(); } if (node.Previous.Previous == null) { RemoveFirst(); } else { node.Previous = node.Previous.Previous; node.Previous.Next = node; } }
public SimpleLinkedLisNode <T> AddLast(T element) { var newNode = new SimpleLinkedLisNode <T> { Value = element }; if (Count == 0) { First = Last = newNode; } else { newNode.Previous = Last; Last = Last.Next = newNode; } Count++; OnNodeAdded(newNode); return(newNode); }
public SimpleLinkedLisNode <T> AddBefore(SimpleLinkedLisNode <T> node, T element) { if (node == null) { throw new ArgumentNullException(); } if (node.Previous == null) { return(AddFirst(element)); } else { var newNode = new SimpleLinkedLisNode <T> { Value = element, Next = node, Previous = node.Previous }; node.Previous = node.Previous.Next = newNode; Count++; OnNodeAdded(newNode); return(newNode); } }