>>544 >>608 >>610
最初のheadは使われてないから、最初のmalloc()の後にでもp = headとかしたらいい。
insert()をrを返すようにして、それをpでうけるようにしたら、
ループが回る度にpが最新のノードをさすようになる。
p = insert(string, p , head); headを引数にする必要はないと思うけど。
最初にp = headにすれば、pがNULLになるときがないから。
あと、insert()のr->nextは次のノードがないうちは空なんだからNULLを代入した方がいい。