、一方条件は、ポインタのアドレスを参照している(ポインタが格納されている)とstruct node **head
はmain()
で静的位置を指しているが、(&(*temp)->next)
の割り当てを指しています最後の項目。
リンクリスト内の項目を比較するために、あなたはポインタstruct node *
代わりのポインタstruct node **
のアドレスを比較する必要があります。 Count()
関数で
、*head
は( NULLと比較していない)が存在するので、カウンタcount
は1から開始する必要が円形リスト内のすべての項目をカウントするためには、代わりに次の項目temp = &((*head)->next);
のtemp = &(*head);
によって開始する必要があり。
ここでは"Minimal, Complete, and Verifiable example"です。
int Count2(struct node **head)
{
printf("entered");
struct node *temp;
int count = 1;
temp = (*head); // pointers to the first
while (temp->next != *head) // direct pointer comparison
{
printf("entered");
temp = temp->next; // natural linked-list exploration
count++;
}
return count;
}
:ポインタは、次の例のようなレベルで
#include <stdio.h>
#include <stdlib.h>
#define NODE_MAX (5)
struct node {
struct node *next;
};
int Count(struct node **head)
{
printf("entered");
struct node **temp;
int count = 1; // at least the '*head' node exists
temp = &(*head);// &((*head)->next);
while (((*temp)->next) != *head) // use '*head'
{
printf("entered");
temp = &((*temp)->next);
count++;
}
return count;
}
int main()
{
struct node array[NODE_MAX];
struct node *head, *temp;
head = &(array[0]);
temp = head;
for(int i=1;i<NODE_MAX;i++) {
temp->next = &(array[i]);
temp = temp->next;
}
temp->next = &(array[0]);
printf("\nCount = %d\n",Count(&head));
system("pause");
return (0);
}
リンクリストを管理するために、よりシンプルになります