Deletes a value from the list by removing the first occurrence. Adjusts head, tail, and neighboring nodes as necessary.
The value to delete.
Inserts a new value at the end of the list. Updates the tail pointer and, if the list was empty, also sets the head.
The value to insert.
Searches for a value in the list. Traverses from the head to the tail and returns true upon finding the value.
The value to search for.
Class representing a doubly linked list. A doubly linked list allows traversal in both forward and backward directions.