將兩個有序連結串列併為一個有序連結串列
阿新 • • 發佈:2019-01-06
#include #include #ifndef FALSE #define FALSE (0) #define TRUE (!FALSE) #endif typedef int ElemType; typedef struct LNode{ // ElemType data; struct LNode *next; }LNode, *LinkList; LinkList CreateList(int n); void PrintList(LinkList L); LinkList MergeList(LinkList La, LinkList Lb, LinkList Lc); LinkList MergeList(LinkList La, LinkList Lb, LinkList Lc) { LinkList pa, pb, pc; pa = La->next; pb = Lb->next; Lc = pc = La; while(pa && pb){ if(pa->data <= pb->data){ pc->next = pa; pc = pa; pa = pa->next; }else{ pc->next = pb; pc = pb; pb = pb->next; } } pc->next = pa ? pa : pb; return Lc; } int main(void) { int i, anu, bnu; LinkList La, Lb, Lc; printf("please input the number of lista:"); scanf("%d", &anu); La = CreateList(anu); PrintList(La); printf("please input the number of listb:"); scanf("%d", &bnu); Lb = CreateList(bnu); PrintList(Lb); Lc = MergeList(La, Lb, Lc); PrintList(Lc); } LinkList CreateList(int n) { int i; LinkList L, p; L = (LinkList)malloc(sizeof(LNode)); if(L == NULL){ printf("create linklist failure.\n"); return FALSE; } L->next = NULL; for(i = 0; i < n; i++){ p = (LinkList)malloc(sizeof(LNode)); if(p == NULL){ printf("create linknode error.\n"); return FALSE; } scanf("%d", &p->data); p->next = L->next; L->next = p; } return L; } void PrintList(LinkList L) { while(1){ printf("%d ", L->next->data); L = L->next; if(L->next == NULL)break; } putc('\n', stdout); }