32.png

    1. /*
    2. 假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素递减的单链表,
    3. 并要求利用原来两个单链表的节点存放归并后的单链表。
    4. 分析:
    5. 因为链表递增,所以我们可以采用头插法进行处理,以a链为起始链,进行归并
    6. */
    7. struct Link {
    8. int data;
    9. struct Link *next;
    10. };
    11. #include <stdio.h>
    12. void merge(Link *ha,Link *hb) {
    13. struct Link *l = ha, *pa = ha->next, *pb = hb->next, *ra, *rb;
    14. l->next = NULL;
    15. while (pa&&pb) {
    16. if (pa->data<pb->data) {
    17. ra = pa->next;
    18. pa->next = l->next;
    19. l->next = pa;
    20. pa = ra;
    21. }
    22. else {
    23. rb = pb->next;
    24. pb->next = l->next;
    25. l->next = pb;
    26. pb = rb;
    27. }
    28. }
    29. while (pa) {
    30. ra = pa->next;
    31. pa->next = l->next;
    32. l->next = pa;
    33. pa = ra;
    34. }
    35. while (pb) {
    36. rb = pb->next;
    37. pb->next = l->next;
    38. l->next = pb;
    39. pb = rb;
    40. }
    41. }
    42. int main() {
    43. struct Link *ha,*hb;
    44. Link *createLink(int);
    45. void printfNowLink(Link *);
    46. ha = createLink(0);
    47. hb = createLink(0);
    48. merge(ha,hb);
    49. printfNowLink(ha);
    50. return 0;
    51. }