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;
}
删除链表中所有与输入值相同的元素,不知道上边这个错哪了,求助求助
你应该去比较节点中存放的值 temp->data,而不是直接将两个指针相比 if语句应该比较结点的数字域,而不是指针域。
另外你的删除方式也错了,你是这样写的:temp2->next = temp2->next->next;temp2 = temp2->next;这样子的话你的temp2 = 原来的temp2->next->next,也就是说你最后free掉的并不是你想删除的那个结点。正确的删除应该这样写:定义一个同类型结点temp3=temp2->next,temp2->next=temp3->next最后free(temp3) 啦啦啦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]