34.png

    1. /*
    2. 已知两个链表A、B分别表示两个集合,其元素递增排列,编制函数,求A与B的交集,并存放于A链表中。
    3. 分析:
    4. 与上题类似,因为链表本身递增排序,我们可以设置两个指针,同时遍历A、B链表,同则保留,异则删除
    5. */
    6. struct Link {
    7. int data;
    8. struct Link *next;
    9. };
    10. #include <stdio.h>
    11. void listCommon(Link *a,Link *b) {
    12. struct Link *pA = a->next, *pB = b->next,*r,*la=a;//用la指向a,便可直接链在a后面
    13. la->next = NULL;
    14. while (pA&&pB) {
    15. if (pA->data==pB->data) {
    16. la->next = pA;
    17. la = pA;
    18. pA = pA->next;
    19. pB = pB->next;
    20. }
    21. else {
    22. pA->data < pB->data ? pA = pA->next : pB = pB->next;
    23. }
    24. }
    25. la->next = NULL;
    26. }
    27. int main() {
    28. struct Link *a, *b;
    29. Link *createLink(int);
    30. void printfNowLink(Link *);
    31. a = createLink(0);
    32. b = createLink(0);
    33. listCommon(a,b);
    34. printfNowLink(a);
    35. return 0;
    36. }