>>695
>List **find(List **p, const char *name, const char *tel)
この書き方が個人的に好み。
でも、なぜ、データの書き換わらない find() で List **p を渡すのですか?むしろ、
input(List **haed, ...)
delete(List **head, ...)
load(List **had, ...)
の方が合理的だと思いますが、どうでしょうか?

あと線形リストのソーティングはおいしい課題なのに、パスするとはもったいない。