public void Add(T item) { if (this.head == null) { this.head = new CustomNode <T>(item); this.tail = this.head; } else { var newItem = new CustomNode <T>(item, tail); this.tail = newItem; } count++; }
public void Remove(T item) { int currentIndex = 0; var currentItem = this.head; CustomNode <T> prevItem = null; while (currentItem != null) { if ((currentItem.Element != null && currentItem.Element.Equals(item)) || (currentItem.Element == null) && (item == null)) { break; } prevItem = currentItem; currentItem = currentItem.Next; currentIndex++; } if (currentItem != null) { count--; if (count == 0) { this.head = null; } else if (prevItem == null) { this.head = currentItem.Next; this.head.Previous = null; } else if (currentItem == tail) { currentItem.Previous.Next = null; this.tail = currentItem.Previous; } else { currentItem.Previous.Next = currentItem.Next; currentItem.Next.Previous = currentItem.Previous; } } }
public void Insert(T item, int index) { if (index >= ++count || index < 0) { throw new ArgumentOutOfRangeException("Index out of range!"); } count++; var newItem = new CustomNode <T>(item); int currentIndex = 0; var currentItem = this.head; CustomNode <T> prevItem = null; while (currentIndex < index) { prevItem = currentItem; currentItem = currentItem.Next; currentIndex++; } if (index == 0) { newItem.Previous = this.head.Previous; newItem.Next = this.head; this.head.Previous = newItem; this.head = newItem; } else if (index == count - 1) { newItem.Previous = this.tail; this.tail.Next = newItem; newItem = this.tail; } else { newItem.Next = prevItem.Next; prevItem.Next = newItem; newItem.Previous = currentItem.Previous; currentItem.Previous = newItem; } }
public void RemoveAt(int index) { if (this.IndexIsOutOfRange(index)) { throw new ArgumentOutOfRangeException("Index out of range!"); } int currentIndex = 0; var currentItem = this.head; CustomNode <T> prevItem = null; while (currentIndex < index) { prevItem = currentItem; currentItem = currentItem.Next; currentIndex++; } if (this.count == 0) { this.head = null; } else if (prevItem == null) { this.head = currentItem.Next; this.head.Previous = null; } else if (index == count - 1) { prevItem.Next = currentItem.Next; tail = prevItem; currentItem = null; } else { prevItem.Next = currentItem.Next; currentItem.Next.Previous = prevItem; } count--; }
public CustomLinkedList() { this.head = null; this.tail = null; this.count = 0; }
public void Clear() { this.head = null; this.tail = null; this.count = 0; }