Вы должны предоставить весь код, чтобы увидеть, как вы используете функцию и список.Фактическая ошибка, вероятно, в другом месте.Как вы сравните, если конец списка достигнут?
Обычно указатель next
последнего узла связанного списка назначается NULL
.Это будет с меньшей вероятностью вызывать бесконечные циклы.
обычно вы делаете что-то вроде этого:
void buildList(){
// the list base
adj[0] = malloc(1*sizeof(*v));
adj[0]->num = 1;
adj[0]->next = adj[0]; // <-- make the last node point to itself
// append more items to the end of the list
Vertex *v=adj[0];
while (v != v->next) v = v->next; // <-- find the end of the list
int i;
int num_nodes = 1; // <-- specify the number of nodes you want in total
for (i = 1; i < num_nodes; i++) {
// append another item
v->next = malloc(1*sizeof(*v));
// initialize it
v = v->next;
v->num = i;
v->next = v; // <-- make the last node point to itself
}
}
, тогда как описанный вами бесконечный цикл, вероятно, исходит из того факта, что вы назначилисписок базы до конца списка.Таким образом, эффективно составляя список цикла.