我有双向链表的三个元素,我有两个操作:foo()
和bar()
。
基于一些布尔标志,我必须对两个元素中的第一个执行foo()
操作(if ),并对剩余的单个元素执行操作(if)。true
bar()
false
所以,这是干净的代码,但是错误的,因为它对两个元素都执行了 foo() :
while(head->next != NULL)
{
if(head->flag == true)
{
foo();
}
if(head->flag == false)
{
bar();
}
head = head->next;
}
列表元素可能以随机顺序出现,因此它可能是 A、C、B 或 B、A、C(假设 A 和 B 在这两种情况下都需要foo()
操作)。
我的问题是,如果 A 和 B 先出现,我会在他们两个上调用 foo() 函数(我不能如上所述)。
实际上,当我再次分析它时,我发现在每种情况下我都会调用这个函数两次。
我想出的解决方案是:
int flag = 0;
while(head->next != NULL)
{
if(head->flag == true && flag == 0)
{
foo();
flag = 1;
}
if(head->flag == false)
{
bar();
}
head = head->next;
}
但是代码突然变得丑陋了。
有没有办法在不使用标志并保持代码干净的情况下解决这个问题?