In class on Monday we discussed a list variant called the doubly linked list. This variant has nodes which keep track of not only the node that comes after them, but also the node that comes before them. To further facilitate traversing either forward or backwards through the list, the doubly linked list keeps track of both the "head" (first node) and "tail" (last node).
To implement this, we need to alter insertions and deletions to do the proper actions for four cases:
empty() function is called. It is only a partial implementation
because it does not contain any reverse traversals.
The implementation also does not have node deletion (the remove()
function). Your task for this assignment is to implement node deletion
following the pseudocode given in class on Monday. That pseudocode is:
Doubly linked list Deletion
Given - node to delete ("ptr")
(since it is implemented as a member function in the list, it does
not need the reference to the list as discussed in class. That is
only needed by procedural implementations. Also, we can access the
head and tail directly since this function is inside the list object)
if list is empty
print/raise "empty list" error
return out of function
end-if
if ptr is NULL
print/raise "invalid pointer" error
return out of function
end-if
if ptr is equal to the head AND ptr is equal to the tail
set head and tail to NULL
else if ptr is equal to the head
set head to head->next
set head->prev to NULL
else if ptr is equal to the tail
set tail to tail->prev
set tail->next to NULL
else
set nextNode to ptr->next
set prevNode to ptr->prev
set nextNode->prev to prevNode
set prevNode->next to nextNode
end-if
delete ptr
Once you implement the deletion pseudocode, you should be able to use the menu
to insert data into the list, then search for an integer, then delete the node
containing that integer.
Email me your updated lab4.cpp file.