2.3 Implement an algorithm to delete a node in the middle of a singly linked list, given only access to that node.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
bool deleteNode(ListNode *n) {
if (n == NULL || n->next == NULL) {
return false;
}
ListNode *next = n->next;
n->val = next->val;
n->next = next->next;
delete next;
return true;
}