/* 合并两个有序链表。--迭代法 */ #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; }