Skip to content

Instantly share code, notes, and snippets.

@sundeepblue
Last active August 29, 2015 13:55
Show Gist options
  • Save sundeepblue/8716036 to your computer and use it in GitHub Desktop.
Save sundeepblue/8716036 to your computer and use it in GitHub Desktop.
delete a node in a linked list in O(1)
void delete_node(TreeNode **head, TreeNode *p) {
if(*head == NULL || p == NULL) return;
if(*head == p) {
delete p;
p = NULL; // necessary
*head = NULL;
return;
}
if(p->next != NULL) {
TreeNode *nxt = p->next;
p->val = nxt->val;
p->next = nxt->next;
delete nxt;
nxt = NULL; // necessary
}
else {
TreeNode *c = *head;
while(c->next->next) {
c = c->next;
}
delete c->next;
c->next = NULL;
}
}
// another way
void delete_node(node *head, node *p) {
if(!head || !p) return;
node dummy(-1);
dummy.next = head;
if(p == head) {
dummy.next = head->next;
delete head;
head = dummy.next;
return;
}
if(p->next) {
...
} else {
...
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment