The : operator is known as the “cons” operator and is used to prepend a head element to a list. So [] is a list and x:[] is prepending x to the empty list making it the list [x]. If you then cons y:[x] you end up with the list [y, x] which is the same as y:x:[].
The ++ operator is the list concatenation operator which takes two lists as operands and “combines” them into a single list. So if you have the list [x] and the list [y] then you can concatenate them like this: [x]++[y] to get [x, y].
Notice that : takes an element and a list while ++ takes two lists.
As for your code that does not work.
reversex ::[Int]->[Int]
reversex [] = []
reversex (x:xs) = reversex(xs):x:[]
The reverse function evaluates to a list. Since the : operator does not take a list as its first argument then reverse(xs):x is invalid. But reverse(xs)++[x] is valid.