public void SetAfter(T after, T data) { if (Head != null) { var current = Head.Next; while (current != null) { if (current.Data.Equals(after)) { if (current.Next != null) { var item = new TwoWayLinkedListItem <T>(data); current.Next.Previous = item; item.Next = current.Next; current.Next = item; item.Previous = current; Count++; return; } else { AddData(data); return; } } current = current.Next; } } else { SetHeadAndTail(data); } }
private void SetHeadAndTail(T data) { var item = new TwoWayLinkedListItem <T>(data); Head = item; Tail = item; Count = 1; }
public void AddData(T data) { if (Head != null) { var item = new TwoWayLinkedListItem <T>(data); item.Previous = Tail; Tail.Next = item; Tail = item; Count++; } else { SetHeadAndTail(data); } }
public void AlterHead(T data) { if (Head != null) { var item = new TwoWayLinkedListItem <T>(data); Head.Previous = item; item.Next = Head; Head = item; Count++; } else { SetHeadAndTail(data); } }
public void Delete(T data) { if (Head != null) { var item = new TwoWayLinkedListItem <T>(data); if (Head.Data.Equals(item.Data)) { Head = Head.Next; Count--; return; } var current = Head.Next; var previous = Head; while (current != null) { if (current.Data.Equals(item.Data)) { if (current.Next != null) { previous.Next = current.Next; current.Next.Previous = previous; Count--; return; } else { current.Previous = null; previous.Next = null; Count--; return; } } previous = current; current = current.Next; } } else { throw new ArgumentNullException("Two way linked list is empty!"); } }