我想获得两个链表的交集,但是当我在for循环之外声明迭代器时它就不起作用了
// THIS WORKS FINE
for (SList iter1 = list1 ; !slist_empty(iter1); iter1 = iter1->next) {
for(SList iter2 = list2 ; !slist_empty(iter2); iter2 = iter2->next) {
if(comp(iter1->data, iter2->data)) {
result = slist_add(result, iter1->data);
}
}
}
// THIS DOESN't
SList iter1 = list1 ;
SList iter2 = list2 ;
for (; !slist_empty(iter1); iter1 = iter1->next) {
for(; !slist_empty(iter2); iter2 = iter2->next) {
if(comp(iter1->data, iter2->data)) {
result = slist_add(result, iter1->data);
}
}
}
即时编译-std = c99
在第一个版本中,您将通过list2
获取list1
中的每个项目。
在第二个版本中,您只需通过list2
获取list1
中的第一个项目。你需要每次将iter2
“重置”到list2
的开头。