
/* 假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素递减的单链表, 并要求利用原来两个单链表的节点存放归并后的单链表。 分析: 因为链表递增,所以我们可以采用头插法进行处理,以a链为起始链,进行归并*/struct Link { int data; struct Link *next;};#include <stdio.h>void merge(Link *ha,Link *hb) { struct Link *l = ha, *pa = ha->next, *pb = hb->next, *ra, *rb; l->next = NULL; while (pa&&pb) { if (pa->data<pb->data) { ra = pa->next; pa->next = l->next; l->next = pa; pa = ra; } else { rb = pb->next; pb->next = l->next; l->next = pb; pb = rb; } } while (pa) { ra = pa->next; pa->next = l->next; l->next = pa; pa = ra; } while (pb) { rb = pb->next; pb->next = l->next; l->next = pb; pb = rb; }}int main() { struct Link *ha,*hb; Link *createLink(int); void printfNowLink(Link *); ha = createLink(0); hb = createLink(0); merge(ha,hb); printfNowLink(ha); return 0;}