You have a very clear explanation of how this works in the chapter on Acenstry References in Pro Git:
~is used to get the first parent.^can be used to get the other parents (^2, for example, for a merge).
But you don’t have a simple way to reference the next commit, even if there are more convoluted ways to get it.