Funnyci 发表于 2020-4-3 15:29:20

C语言链表 删除重复元素

struct link *Num4()//输入一个整数,删除这个数在第3项完成后的链表中的所有出现,并输出
{
        struct link *temp2 = head;
        temp = (struct link*)malloc(sizeof(struct link));
        if(temp == NULL)
        {
                printf("内存分配失败!\n");
                exit(1);
        }
        else
        {
                printf("请输入一个整数:");
                scanf("%d",&temp->data);
                temp->next = NULL;
                while(temp2 != NULL)
                {
                        if(temp == temp2->next)
                        {
                                temp2->next = temp2->next->next;
                                temp2 = temp2->next;
                        }
                        else
                                temp2 = temp2->next;
                }
        }
        Printlink(head);
        free(temp);
        return head;
}

删除链表中所有与输入值相同的元素,不知道上边这个错哪了,求助求助

BngThea 发表于 2020-4-3 15:46:31

你应该去比较节点中存放的值 temp->data,而不是直接将两个指针相比

啦啦啦13 发表于 2020-4-3 19:42:09

if语句应该比较结点的数字域,而不是指针域。
另外你的删除方式也错了,你是这样写的:temp2->next = temp2->next->next;temp2 = temp2->next;这样子的话你的temp2 = 原来的temp2->next->next,也就是说你最后free掉的并不是你想删除的那个结点。正确的删除应该这样写:定义一个同类型结点temp3=temp2->next,temp2->next=temp3->next最后free(temp3)

Funnyci 发表于 2020-4-4 15:26:46

啦啦啦13 发表于 2020-4-3 19:42
if语句应该比较结点的数字域,而不是指针域。
另外你的删除方式也错了,你是这样写的:temp2->next = temp ...

struct link *Num4()//输入一个整数,删除这个数在第3项完成后的链表中的所有出现,并输出
{
        struct link *temp1 = head;
        struct link *temp2 = temp1->next;
        temp = (struct link*)malloc(sizeof(struct link));
        if(temp == NULL)
        {
                printf("内存分配失败!\n");
                exit(1);
        }
        else
        {
                printf("请输入一个整数:");
                scanf("%d",&temp->data);
                temp->next = NULL;
                while(temp1 != NULL)
                {
                        if(temp->data == temp1->data)
                                temp1->next = temp2->next;
                        else
                        {
                                temp1 = temp1->next;
                                temp2 = temp2->next;
                        }
                }
        }
        Printlink(head);
        free(temp);
        return head;
}
能再帮我看下错哪了吗,不会输出结果
页: [1]
查看完整版本: C语言链表 删除重复元素