You are given a pointer to a node in a singly linked list. Delete that node from the linked list. Pointer to previous node is not available.
Solution:
The algorithm is as the following:
We have a list looking like: … -> Node(i-1) -> Node(i) -> Node(i+1) -> … and we need to delete Node(i).
Step 1: Copy data (not pointer, the data itself) from Node(i+1) to Node(i), the list will look like: … -> Node(i-1) -> Node(i+1) -> Node(i+1) -> …
Step 2: Copy the NEXT of second Node(i+1) into a temporary variable.
Step 3: Now Delete the second Node(i+1), it doesn’t require pointer to the previous node.
void deleteNode( Node * node ) { Node * temp = node->next; node->data = node->next->data; node->next = temp->next; free(temp); }
Note: Node should not be the last node.