Почему еще часть исполняется 3 раза? - PullRequest
0 голосов
/ 07 ноября 2019

Реализация односвязного списка для подсчета количества узлов в связанном списке. Я написал код для подсчета количества узлов в односвязном списке, он рассчитывается правильно, но в противном случае оператор части выполняется 3 раза, если я использую глобальную переменную count, то же самое происходит. почему так? Я использую редактор блоков кода, и я получаю вывод вышеупомянутого. Я не понимаю, почему еще часть исполняется три раза. Пожалуйста, помогите решить эту проблему.

#include<stdio.h>
#include<stdlib.h>
struct data
{
    int i;
    struct data *next;
};
//int count;
struct data *head=NULL;
void insert(int d)
{
    struct data *p;
    if(head==NULL)
    {
        p=(struct data*)malloc(sizeof(struct data));
        p->i=d;
        p->next=NULL;
        head=p;
    }
    else
    {
        p=(struct data*)malloc(sizeof(struct data));
        struct data *temp;
        temp=head;
        while(temp->next!=NULL)
        {
            temp=temp->next;
        }
        temp->next=p;
        p->i=d;
        p->next=NULL;

    }
}
void disp(struct data *temp)
{
   if(temp==NULL)
   {
       return;
   }
   else
   {
      // printf("%d ",temp->i);//prints in forward direction
       disp(temp->next);
       printf("%d ",temp->i);//prints in reverse direction
   }
}
void countL(struct data *c)
{
    static int count;
    if(c==NULL)
    {
        return;
    }
    else
    {
        count++;
        countL(c->next);

    }
    printf("\n");
    if(count==0)
    {
        printf("List is empty\n");
    }
    else
    {
        printf("Number of nodes in the linked list are:%d\n",count);
    }
}
int main()
{
    insert(1);
    insert(2);
    insert(3);
    disp(head);
    countL(head);
}

Вывод:

3 2 1
Number of nodes in the linked list are:3

Number of nodes in the linked list are:3

Number of nodes in the linked list are:3

Я написал код для подсчета количества узлов в односвязном списке, он считается правильно, но в остальномОператор part выполняется 3 раза, если я использую глобальную переменную count, то же самое происходит. почему так? Я использую редактор блоков кода и получаю вывод, упомянутый выше.

1 Ответ

2 голосов
/ 07 ноября 2019

Это потому, что ваша печать if / else происходит безоговорочно каждый раз, когда вызывается countL. Если вы хотите вызвать его только один раз, вы должны переместить его внутрь if (c == NULL), чтобы он вызывался только после завершения обхода списка:

void countL(struct data *c)
{
    static int count;
    if (c == NULL)
    {
        printf("\n");
        if (count == 0)
        {
            printf("List is empty\n");
        }
        else
        {
            printf("Number of nodes in the linked list are:%d\n", count);
        }
        return;
    }
    else
    {
        count++;
        countL(c->next);
    }
}

Таким образом, вы получите выход только один раз.

...