LinkList Delete(LinkList L) { //删除集合中相同的元素 LinkList p,s,q; p=L->next; if(!p) return; while(p->next!=NULL) { q=p; while(q->next) { //固定p所指结点,向后遍历,寻找与之数据域相同的结点 if(strcmp(q->next->data,p->data)==0) { //在这里将q->next所指的结点存放数据与p作比较 s=q->next; q->next=s->next; free(s); } else q=q->next; } p=p->next; } }
时间: 2024-04-23 21:24:43 浏览: 89
LinkList.zip_数据结构_C/C++_
这是一个函数,其功能是删除链表中与其它节点数据相同的节点,其中采用了双重循环来实现。具体实现过程如下:
1. 定义了三个指针变量 p,s,q,其中 p 指向链表的第一个节点,q 指向 p,s 用来保存要删除的节点。
2. 判断 p 是否为空,若为空则直接返回。
3. 开始第一层循环,其中循环条件是 p 的下一个节点不为空,这是因为要判断当前节点与其它节点是否相同,因此需要遍历整个链表。
4. 在第一层循环中,开始第二层循环,其中循环条件是 q 的下一个节点不为空,这是因为需要遍历当前节点之后的所有节点。
5. 在第二层循环中,判断 q 的下一个节点的数据是否与 p 的数据相同,若相同则删除该节点,否则继续向后遍历。
6. 删除节点的方式是将 q 的下一个节点保存到 s 中,然后将 q 的 next 指针指向 s 的 next,最后释放 s 所指向的内存空间。
7. 第二层循环结束后,将 p 指向下一个节点,继续第一层循环,直至遍历完整个链表。
8. 函数结束,返回链表头指针 L。
阅读全文