c-为什么其他部分被执行了3次



实现单链表,以计算链表中的节点数。我已经编写了计算单链表中节点数量的代码,它计数正确,但如果我使用全局计数变量,部分语句将执行3次,同样的事情也会发生。为什么会这样?我使用的是代码块编辑器,我得到了上面提到的输出。我不明白为什么其他部分被执行了三次。请帮助解决这个问题。

#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 emptyn");
}
else
{
printf("Number of nodes in the linked list are:%dn",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

我已经编写了计算单链表中节点数量的代码,它计数正确,但如果我使用全局计数变量,部分语句将执行3次,同样的事情也会发生。为什么会这样?我使用的是代码块编辑器,我得到了上面提到的输出。

这是因为每次调用countL时,打印if/else都会无条件发生。如果你只想调用它一次,你应该把它移到if (c == NULL)中,这样它只有在列表遍历终止时才会被调用:

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

这样你只得到一次输出。

相关内容

  • 没有找到相关文章

最新更新