0

100 個のノードを持つ単一リンク リストがあります。このリンクされたリストの循環を確認する必要がありますか?

これは、リストをトラバースすることで実現でき、最後のノード リンク フィールドが head に等しいことを確認する必要があります。

struct node *temp1, *temp2;
while(i != 100) {
  temp2 = temp1->link;
  if(temp2==head) {
    printf("circular");
    break;
  else
    temp1=temp1->link;
      i++;
  }

このメソッドは、最大 100 回の繰り返しが必要です。これを半分に減らしたいのですが、これを達成するには50回の反復が必要です。

これを行うことは可能ですか?はいの場合、どうすればこれを行うことができますか?

4

4 に答える 4

0

単一のリンクリストを使用すると、リンクリスト全体をトラバースする必要があります。これは循環リンクリストにも適用されます。そうでなければ、なぜ人々はそのようなADTを作るのでしょうか?

ダブルリンクリストを使用して、リンクリストが循環しているかどうかを確認できます。そして一定時間で確認できます。

于 2013-09-28T16:23:43.357 に答える
0

循環リンクリストをチェックするには、リンクリストをループし、反復ごとに次をチェックします。

if the head == temp->next than True, it does, than it's CircularLinkedList
else if temp->next == null than False
于 2013-09-28T16:04:08.317 に答える