Q:

Recursively deleting a linked list, memory was allocated using new

void DeleteList(node** Head)
{
  if(*Head==NULL)
    return;
  node* current=*Head;
  delete[] current;
  current=NULL;
  DeleteList(&((*Head)->next));
}

The program crashes with a segmentation fault.

A:

You need to copy (*Head)->next into another variable before you delete[] current. Otherwise, you're trying to access next in a node that has been deleted.
void DeleteList(node** Head)
{
  if(*Head==NULL) {
    return;
  }
  node* current=*Head;
  node* tail = current->next;
  delete current;
  DeleteList(&tail);
}

Also, I doubt you should be using delete[]. current is presumably just a single node, not an array of nodes. And there's no need to set current = NULL; this is a local variable that's just going to go away when the function ends, and you never used it afterward, so it doesn't matter what it contains.
Another solution would be to simply move DeleteList(&((*Head)->next)); to before delete current;.
I'm also not sure why you call this function using a pointer to a pointer. That's usually done when you want to modify the caller's pointer. But you never do that here. But perhaps you're doing it for consistency with the rest of the linked list library, and that's OK.

