我必须打印出链表中的每个唯一整数,事实证明它没有打印任何内容。我尝试使用Continue并删除else,但是这样做只能使链表中的第一个唯一项生效。我的问题是继续结束循环还是仅跳过当前迭代?如果只跳过当前列表,说我有一个看起来像1-> 5的链表,为什么我只在这里打印1张?预先感谢。
struct node {
int data;
struct node* next;
}
void printList(struct node *head) // print out unique items of the list
{
struct node *ptr = head;
struct node *prev = NULL;
while(ptr != NULL)
{
if(prev->data == ptr->data)
{
prev = ptr;
ptr = ptr->next;
}else{
printf("%d", ptr->data);
prev = ptr;
ptr = ptr->next;
}
}
}
答案 0 :(得分:1)
编写的代码会产生分段错误,因为您引用的是NULL指针。在这一行:
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;
}
}