Код, как написано, генерирует ошибку сегментации, потому что вы ссылаетесь на нулевой указатель.В этой строке:
if(prev->data == ptr->data)
Поскольку prev
имеет значение NULL для запуска, prev->data
разыменует указатель NULL и завершит работу программы.Это не объясняет, почему вы видели, что он не печатает последний элемент, но написанный код определенно не работает.
Попробуйте:
void printList(struct node *head) // print out unique items of the list
{
struct node *ptr = head;
struct node *prev = NULL;
while (ptr != NULL)
{
// Check if prev is NULL, and if not, that prev->data and ptr->data
// don't match.
if (! prev || ptr->data != prev->data)
{
printf("%d\n", ptr->data);
}
prev = ptr;
ptr = ptr->next;
}
}