2012-01-01 8 views
-2

内の別のノードを指す変数を有するインタビュー質問:各ノードでランダムなリンクをコピーリンクされたリストは、各ノードがランダムリスト

コピーリンクされたリスト、各ノードには変数があり、ランダムに がリスト内の別のノードを指しています。

私のアイデア:

反復リスト、その変数によって各ノードとその尖ったノードをコピーして、最後に見張りを追加し、各ノードに対して同じことを行います。

新しいリストでは、各ノードiごとに、センチネルで終わった各リストを区切り、iの変数ポイントを使用します。

スペースが効率的ではありません。時間と空間ではO(n^2)です。 良いアイデアですか?

答えて

1

アイデアは、 Java シリアライゼーションは、ポインタがいつシリアライズされたノードを指しているかを認識し、任意の構造を合理的に効率的にシリアライズ(およびデシリアライズ)できるようにします。 http://docs.oracle.com/javase/1.4.2/docs/guide/serialization/index.htmlのリンクを介してダウンロードできるこの仕様は、これが行われているが、正確にはどのように - 私はハッシュテーブルが疑わしいとは言いません。

私はコピーがこれと非常によく似ていると思います。ポインタのいくつかがリンクリストを構成していることを知る必要はありません。深さの最初の検索を使用して、ノードとそのポインタによって形成されたグラフを走査し、コピーされたノードの値と共に、各ノードの位置をハッシュテーブルに置くことができます。ノードがすでに存在する場合は、コピーされたノード内のポインタが、ハッシュテーブルによって指定されたノードのコピーを指すようにする以外は何もする必要はありません。ノードがまだ存在しない場合は、コピーを作成し、コピーのアドレスを値としてハッシュテーブルにノードを入れ、ノード内の情報とそのポインタを新しく作成したコピーに再帰的にコピーします。

0

これは一般的なインタビューの質問です。 Googleを使用すると、多くの回答を見つけることができます。これは私が理解するのに良いと思うリンクです。しかし、あまりにもコメントを読んでください、本体にいくつかのエラーがあります:Copy a linked list with next and arbit pointer