// Remove a node from tree void BST::remove(Entry *node) { if(node->left != NULL && node->right != NULL) { removeTwo(node, 0); } else { removeOne(node); } }
int removeTwo(node*& head) { node* curr = head; node* prev = NULL; if(curr == NULL) { return 0; } else if(curr->data == 2) { if(curr == head) { node* currPtr = head; head = head->next; delete currPtr; // currPtr = head; return 1 + removeTwo(head); } else if(curr->next == NULL) { delete curr; curr = NULL; prev->next = NULL; return 1; } else { prev->next = curr->next; delete curr; curr = prev->next; return 1 + removeTwo(curr); } } else { return removeTwo(head->next); } }
int removeTwo(node*& head) { if(head == NULL) { return 0; } if(head->data == 2) { node* temp = head; if(head->next != NULL) { head = head->next;//if there is a next, advance to it if(temp->previous != NULL)//if there is a previous, skip over temp (aka delete) { head->previous = temp->previous; } else { head->previous = NULL; } } else// there is only the head remaining { delete head; head = NULL; return 1; // end of list } delete temp; return 1 + removeTwo(head); } else { return removeTwo(head->next); } }