Предположим, у меня есть связанный список неизвестной длины. Я хотел бы иметь функцию для печати всего списка, если длина меньше 10, а если его длина больше 10, то отображать только первые 10 узлов.
Однако, поскольку я сравниваю указатель и целое число для вывода первых 10 узлов, я получаю следующую ошибку:
ordered comparison between pointer and integer ('NodeT *' (aka 'struct node *') and 'int')
for (current = list; current < 30; current = current->next)
Если я изменю его, чтобы иметь счетчик и цикл, пока счетчик меньше 10, я получаю ошибку сегментации.
Как я могу отобразить первые 10 узлов, если длина списка больше 10?
У меня есть следующая функция:
void *printNodes(NodeT *list) {
int length = countNodes(list); // finds length of a linked list
int count = 0;
NodeT *current;
if (list == NULL) {
printf("Empty list.\n");
}
if (length < 10) {
// Display all if number of nodes is less than 10
for (current = list; current != NULL; current = current->next) {
printf("%s\n", current->data);
}
} else {
// Display first 10 if number of nodes more than 10
for (current = list; current < 10; current = current->next) {
printf("%s\n", current->data);
// for (current = list; count < 10; current = current->next) {
// printf("%s\n", current->data);
// count++;
}
}
return 0;
}
10
. Или вы даже можете использоватьlength
напрямую, уменьшая его до0
. - person kaylum   schedule 26.01.2021countNodes
ошибается. Возможно, список неправильно сформирован. Мы не можем сказать с таким неполным кодом. - person kaylum   schedule 26.01.2021countNodes
(которую вы не показываете) предоставляет неверную информацию, либо (2)current->data
не всегда указывает на допустимую строку с нулевым символом в конце. , или (3) сам связанный список поврежден. Поскольку вы не предоставили минимально воспроизводимый пример, у нас нет возможности это узнать. - person Andreas Wenzel   schedule 27.01.2021