Почему мой код не работает, когда я объявляю переменную вне цикла for? - PullRequest
0 голосов
/ 28 марта 2019

Я хочу получить пересечение двух связанных списков, но когда я объявляю итераторы вне цикла 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);
    }
  }
}

im компилируется с -std = c99

1 Ответ

2 голосов
/ 28 марта 2019

В первой версии вы проходите через list2 для каждого элемента в list1.

Во второй версии вы проходите list2 только для первого элемента в list1. Вам необходимо каждый раз «сбрасывать» iter2 на начало list2.

...