算法思路:
设立三个工作指针p,q,r,p用于遍历链表,q用于遍历p后面的链表,r保存需要删掉的结点。P遍历整个链表,p每到一个结点,q就从这个结点往后遍历,并与p比较,相同的话就删掉此结点。
功能函数:
/* 删除链表中的重复结点 */ Node *deleteReprodecedNode(Node *head) { Node *p, *q, *r; p = head->next; while(p) //p用于遍历链表 { q = p; while(q->next) //q用于遍历p后面的链表 { if(q->next->data == p->data) { r = q->next; //r保存需要删掉的结点 q->next = r->next; //需要删掉的结点的前后结点相连 free(r); } else q = q->next; } } return head; }