将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

/*
合并两个有序链表。--迭代法
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
typedef struct ListNode{
    int val;
    struct ListNode *next;
};
void print(struct ListNode *L){
    struct ListNode *p=L->next;
    while(p){
        printf("%d ",p->val);
        p=p->next;
    }
    printf("
");
}
void create(struct ListNode *&L,int a[],int n){
    struct ListNode *r,*s;
    L=(struct ListNode*)malloc(sizeof(struct ListNode));
    r=L;
    int i;
    for(i=0;i<n;i++){
        s=(struct ListNode*)malloc(sizeof(struct ListNode));
        s->val=a[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
    struct ListNode *L,*p,*pa=l1->next,*pb=l2->next;
    L=(struct ListNode*)malloc(sizeof(struct ListNode));
    p=L;
    while(pa&&pb){
        if(pa->val<pb->val){
            p->next=pa;
            pa=pa->next;
        }else{
            p->next=pb;
            pb=pb->next;
        }
        p=p->next;
    }
    p->next=pa!=NULL?pa:pb;
    return L;
}

int main()
{
    struct ListNode *La,*Lb,*L;
    int a[]={1,2,4},b[]={1,3,4};
    create(La,a,3);
    create(Lb,b,3);
    print(La);
    print(Lb);
    L=mergeTwoLists(La,Lb);
    print(L);
    return 0;
}
/*
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 --归并法。
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
typedef struct node{
    int data;
    struct node *next;
}LinkList;
void print(LinkList *L){
    LinkList *p=L->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("
");
}
void create(LinkList *&L,int str[],int n){
    LinkList *r,*s;
    L=(LinkList*)malloc(sizeof(LinkList));
    r=L;
    int i;
    for(i=0;i<n;i++){
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=str[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void un(LinkList *&L,LinkList *LA,LinkList *LB){
    L=(LinkList*)malloc(sizeof(LinkList));
    LinkList *pa=LA->next,*pb=LB->next,*r=L,*s;
    while(pa&&pb){
        if(pa->data<pb->data){
            s=(LinkList*)malloc(sizeof(LinkList));
            s->data=pa->data;
            r->next=s;
            r=s;
            pa=pa->next;
        }else{
            s=(LinkList*)malloc(sizeof(LinkList));
            s->data=pb->data;
            r->next=s;
            r=s;
            pb=pb->next;
        }
    }
    while(pa){
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=pa->data;
        r->next=s;
        r=s;
        pa=pa->next;
    }
    while(pb){
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=pb->data;
        r->next=s;
        r=s;
        pb=pb->next;
    }
    r->next=NULL;


}
int main()
{
    LinkList *L,*LA,*LB;
    int i,lena,lenb;
    scanf("%d",&lena);
    int numa[lena];
    for(i=0;i<lena;i++){
        scanf("%d",&numa[i]);
    }
    create(LA,numa,lena);

    scanf("%d",&lenb);
    int numb[lenb];
    for(i=0;i<lenb;i++){
        scanf("%d",&numb[i]);
    }
    create(LB,numb,lenb);

    un(L,LA,LB);


    print(L);
    return 0;
}

  

原文地址:https://www.cnblogs.com/zhaohuan1996/p/12545172.html