请编写函数,对线性表进行单值化处理:删除表中重复的数据元素。
函数原型
void LListUnique(LLIST *list);
说明:参数
list
是指示线性表(单链表)的指针,函数将对list
所指线性表进行单值化处理:每个数据元素只保留第 1 个,后面与之重复的数据元素都被删去。修改主函数,对以上函数进行测试。
int main() {
LLIST a;
LListCreate(&a);
LListInput(&a);
LListUnique(&a);
LListOutput(&a);
putchar('\n');
LListDestroy(&a);
return 0;
}
输入样例
( 2.8, 4.7, 5.2, 2.8, 3.6, 4.7, 5.2, 4.7, 2.8, 2.8, 9.5, 4.7, 3.6, 2.8, 4.7, 9.5 )
输出样例
( 2.8, 4.7, 5.2, 3.6, 9.5 )
思路的话,平台上有许多大佬已经给出,在这里提示一下,由于是数据结构单链表,每删除一个节点后,要让头结点里的length个数减少。
函数实现如下:
void LListUnique(LLIST *list)
{
LNODE *p=list->head->next;//头结点的指针域才指向第一个元素
LNODE *pre=NULL;//被检测的元素的前驱节点
LNODE *r,*t;//r是被检测元素,t是临时用来做为媒介删除的
while(p)
{
r=p->next;
pre=p;
while(r)
{
if(LElementEq( &r->data, &p->data)==1)
{
pre->next=r->next;
t=r;
r=r->next;
free(t);
list->length--;
}
else
{
pre=r;
r=r->next;
}
}
p=p->next;
}
}