while循环的链表问题,我应该使用继续吗?

时间:2019-02-20 20:52:28

标签: c linked-list

我必须打印出链表中的每个唯一整数,事实证明它没有打印任何内容。我尝试使用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;

        }

    }
}

1 个答案:

答案 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;
    }
}