1.问题描述:
给定三个有序单链表,删除三个链表中都含有数值相等的结点。
2.解题思路:
假设有三个有序递增单链表a, b, c, 为删除重复元素, 需依次遍历整个单链表,可能出现的情况为ai<bj,或bj<ck, 或ck<ai, 或我们需要的ai=bj=ck, 出现最后一种情况时,我们仅需删除a链表中的结点即可达到删除三个链表中都含有的数值相等结点的目的。
3.代码实现:
void deletesame(LinkList &a, LinkList &b, LinkList &c) { LNode *pa = a->next, *pb = b->next, *pc = c->next; LNode *pre = pa; //为删除a链表重复元素,需记录其前驱节点 while(pa&&pb&&pc) { if(pa->data<pb->data) {pre=pa; pa=pa->next;} else if(pb->next<pc->next) pb=pb->next; else if(pc->next<pa->next) pc=pc->next; else //当出现ai=bj=ck时,删除a链表中的结点 { pre->next=pa->next; free (pa); pa=pre->next; } } }