public void remove(object e) { if (first == null) { return; } if (first.e.Equals(e)) { first = first.next; SIZE--; return; } LinkedNode node = first; while (node != null) { if (node.Equals(e) && node.next != null) { node.next = node.next.next; SIZE--; return; } node = node.next; } }
/// <summary> /// <para>Removes the given value from the list.</para> /// <para>Expected Runtime: O(n), where n is the number of elements in the list.</para> /// </summary> /// <param name="value"></param> public void Remove(T value) { LinkedNode <T> currentNode = this.headNodeOfList; LinkedNode <T> previousNode = currentNode; while (currentNode.Value.Equals(value) == false) { previousNode = currentNode; currentNode = currentNode.Next; //Reached the end of the list, value wasn't in the lsit to begin with //Exit if (currentNode == null) { return; } } //Handle cases if (currentNode.Equals(this.headNodeOfList)) { this.headNodeOfList = this.headNodeOfList.Next; } else if (currentNode.Equals(this.tailNodeOfList)) { this.tailNodeOfList = previousNode; this.tailNodeOfList.Next = null; } else { previousNode.Next = currentNode.Next; } //Invalidate all of the caches this.isCachedCountValid = false; if (currentNode.Value.Equals(this.GetMinimum())) { this.isCachedMinimumValid = false; } if (currentNode.Value.Equals(this.GetMaximum())) { this.isCachedMaximumValid = false; } //Remove the node and its value currentNode.Remove(); }