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