Difference between deadlock and livelock:
Both of them are similar in the sense that no meaningful progress is made in either.
In deadlock, no operation can make progress, but in livelock, everyone "thinks" they are making progress but they really aren't. This makes debugging livelock worse.
This stack overflow article, which in turn quotes Wiki, explains the difference well.