#c #loops #pointers #linked-list #variable-declaration
#c #циклы #указатели #связанный список #объявление переменной
Вопрос:
Я хочу получить пересечение двух связанных списков, но когда я объявляю итераторы вне цикла 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
Комментарии:
1. просто не работает не могли бы вы выразиться яснее? вы не можете скомпилировать? сбой выполнения? Каково определение SList? Тег C, на самом деле это C или C ?
Ответ №1:
В первой версии вы проходите через list2
для каждого элемента в list1
.
Во второй версии вы проходите только list2
для первого элемента в list1
. Вам нужно каждый раз «сбрасывать» iter2
в начало list2
.