
/*
已知两个链表A、B分别表示两个集合,其元素递增排列,编制函数,求A与B的交集,并存放于A链表中。
分析:
与上题类似,因为链表本身递增排序,我们可以设置两个指针,同时遍历A、B链表,同则保留,异则删除
*/
struct Link {
int data;
struct Link *next;
};
#include <stdio.h>
void listCommon(Link *a,Link *b) {
struct Link *pA = a->next, *pB = b->next,*r,*la=a;//用la指向a,便可直接链在a后面
la->next = NULL;
while (pA&&pB) {
if (pA->data==pB->data) {
la->next = pA;
la = pA;
pA = pA->next;
pB = pB->next;
}
else {
pA->data < pB->data ? pA = pA->next : pB = pB->next;
}
}
la->next = NULL;
}
int main() {
struct Link *a, *b;
Link *createLink(int);
void printfNowLink(Link *);
a = createLink(0);
b = createLink(0);
listCommon(a,b);
printfNowLink(a);
return 0;
}