真面目にコード理解する気あるなら、一度自分で書き直して
つまったところでサンプルみて補った方が良いよ。
ここは基本的に丸投げされた宿題を解く場であって 、解き方を教える場ではないしな。
まあ親切な解答者なら解説までしてくれるかもしれないが。