/// <summary> /// Returns true if the list contains the specified item, /// false otherwise. /// </summary> /// <param name="item">The item to search for</param> /// <returns>True if the item is found, false otherwise.</returns> public bool Contains(T item) { DoublyLinkedListNode <T> current = Head; while (current != null) { // Head -> 3 -> 5 -> 7 // Value: 5 if (current.Value.Equals(item)) { return(true); } current = current.Next; } return(false); }
public void Add(T item) { var nodeToAdd = new DoublyLinkedListNode <T>(item); if (Tail == null) { Head = Tail = nodeToAdd; } else { Tail.Next = nodeToAdd; nodeToAdd.Previous = Tail; Tail = nodeToAdd; } ++Count; }
/// <summary> /// Add the node to the end of the list /// </summary> /// <param name="value">The node to add</param> public void AddLast(DoublyLinkedListNode <T> node) { if (Count == 0) { Head = node; } else { Tail.Next = node; // Before: Head -> 3 <-> 5 -> null // After: Head -> 3 <-> 5 <-> 7 -> null // 7.Previous = 5 node.Previous = Tail; } Tail = node; Count++; }
public bool Remove(T item) { var current = Head; while (current != null) { if (current.Value.CompareTo(item) == 0) { //are we at head if (current.Previous == null) { //is head and tail same if (current.Next == null) { Clear(); return(true); } Head = current; Head.Previous = null; } // are we at tail else if (current.Next == null) { Tail = current.Previous; Tail.Next = null; } else { current.Previous.Next = current.Next; current.Next.Previous = current.Previous; } --Count; return(true); } current = current.Next; } return(false); }
/// <summary> /// Removes the last node from the list /// </summary> public void RemoveLast() { if (Count != 0) { if (Count == 1) { Head = null; Tail = null; } else { // Before: Head --> 3 --> 5 --> 7 // Tail = 7 // After: Head --> 3 --> 5 --> null // Tail = 5 // Null out 5's Next pointer Tail.Previous.Next = null; Tail = Tail.Previous; } Count--; } }
/// <summary> /// Removes the first node from the list. /// </summary> public void RemoveFirst() { if (Count != 0) { // Before: Head -> 3 <-> 5 // After: Head -------> 5 // Head -> 3 -> null // Head ------> null Head = Head.Next; Count--; if (Count == 0) { Tail = null; } else { // 5.Previous was 3, now null Head.Previous = null; } } }
public void Clear() { Head = null; Tail = null; Count = 0; }