練習問題

Linked Listに関するちょっと難しい問題に出会ったのでメモ。

struct node { Item item; node *next; };
typedef node *link;
typedef link Node;

1. いくつかのNodeが存在して、その全てがnextにnull pointerを持っていない(つまり、全てのNodeが自分自身かその他のNodeを指している)場合、あるNodeからリンクをたどっていけば、必ず循環におちいることを証明せよ。

2. 1の条件のもと、あるNodeからリンクをたどっていった場合、いくつの異なるNodeをたどることができるかを計算するプログラムを書け。ただし、Nodeを変更してはならず、定数量以上の追加のメモリスペースを使ってはならない。

3. 2の条件のもと、2つのNodeからそれぞれリンクをたどっていった場合、2つが同じ循環におちいるかどうかを判断するプログラムを書け。