Your solution is the ONLY solution because:
First of all, we know C took D's hat.
Now, let's look at clue 4. C took D's hat, so A couldn't have taken D's coat (because then B would have had to take D's hat, which is impossible because C took it).
Next it's possible to determine D took A's hat and B's coat because A and B can't take their own hat or coat, and C took D's hat.
B had to have taken D's coat, because A can't and C's taken D's hat.
From there, it's possible to deduce the rest easily.