关于C语言的链表

来源:百度知道 编辑:UC知道 时间:2024/06/09 01:00:44
void fun( SLIST *h)
{ SLIST *p, *q;
p=h->next;
if (p!=NULL)
{ q=p->next;
while(q!=NULL)
{ if (p->data==q->data)
{ p->next=q->next;
/**********found**********/
free(q);
/**********found**********/
q=p->next;
}
else
{ p=q;
/**********found**********/
q=q->next;
}
}
}
}
给解释解释这个fun函数吧~~ 是怎么实现其功能的啊
q=p->next; ??什么意思
q=q->next; ??
说的有点模糊
可否给个详细的解释~~我是菜鸟~~

这个问题不好回答的,建议你多看一些关于链表的简单代码,我刚开始时遇到过与你同样的困难,不理解q=p->next;q=q->next;之类语句的意思,但我仔仔细细看了一遍又一遍之后终于明白了,建议看时多画图。
虽然我对你提的问题很了解,但我却不知道如何说起,所以建议你看书,其实不难的.
在此还是简单说说吧,首先你需知道->运算符的意思。
p->next和(*p).next是一样的,其中存放的是下一节点的地址,
q=p->next;的意思就是把下一节点的地址赋给q,同理q=q->next;意思也是把下一节点的地址赋给q

这个功能是删除链表中重复的数据,设置两个指针p,q,q指向p的后继,q去遍历链表,如果相等就删除,不相等p的指针下移!

这个函数的作用是删除相同data 元素, q = p -> next 的意思是 Q 指向 P 的下一个结点, q = q -> next 意思是 Q 指向 Q 的下一个结点!