将两个同为升序的有序链表,请将其合成为一个也是升序的链表。
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node* next;
}linklist;
linklist* creatlinklist()
{
linklist *head,*p,*r;
head=(linklist*)malloc(sizeof(linklist));
head->next=NULL;
r=head;
int x;
scanf("%d",&x);
while(x!=-1)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=p;
scanf("%d",&x);
}
return head;
}
linklist* connect(linklist* ha,linklist* hb)
{
linklist *pa=ha->next;
linklist *pb=hb->next;
linklist *hc,*p,*r;
hc=(linklist*)malloc(sizeof(linklist));
hc->next=NULL;
r=hc;
while(pa&&pb)
{
if(pa->data<pb->data)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=pa->data;
r->next=p;
r=r->next;
pa=pa->next;
}
else if(pa->data>pb->data)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=pb->data;
r->next=p;
r=r->next;
pb=pb->next;
}
else if(pa->data==pb->data)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=pa->data;
r->next=p;
r=r->next;
pa=pa->next;
p=(linklist*)malloc(sizeof(linklist));
p->data=pb->data;
r->next=p;
r=r->next;
pb=pb->next;
}
}
while(pa)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=pa->data;
r->next=p;
r=r->next;
pa=pa->next;
}
while(pb)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=pb->data;
r->next=p;
r=r->next;
pb=pb->next;
}
p->next=NULL;
return hc;
}
void print(linklist *head)
{
linklist *p=head->next;
while(p)
{
printf("%d->",p->data);
p=p->next;
}
return;
}
int main()
{
linklist *ha=creatlinklist();
linklist *hb=creatlinklist();
linklist *hc=connect(ha,hb);
print(hc);
return 0;
}
//不申请额外空间
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
typedef int elemtype;
typedef struct node
{
elemtype data;
struct node* next;
}linklist;
linklist* creatlinklist()
{
linklist *head,*p,*r;
head=(linklist*)malloc(sizeof(linklist));
head->next=NULL;
r=head;
int x;
scanf("%d",&x);
while(x!=-1)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=x;
p->next=NULL;
r->next=p;
r=p;
scanf("%d",&x);
}
return head;
}
linklist* connect(linklist* ha,linklist* hb)
{
linklist *pa=ha->next;
linklist *pb=hb->next;
linklist *hc,*p,*r;
hc=(linklist*)malloc(sizeof(linklist));
hc->next=NULL;
r=hc;
while(pa&&pb)
{
if(pa->data<pb->data)
{
r->next=pa;
r=pa;
pa=pa->next;
}
else if(pa->data>pb->data)
{
r->next=pb;
r=pb;
pb=pb->next;
}
else if(pa->data==pb->data)
{
r->next=pa;
r=pa;
r->next=pb;
r=pb;
pa=pa->next;
pb=pb->next;
}
}
while(pa)
{
r->next=pa;
r=pa;
pa=pa->next;
}
while(pb)
{
r->next=pb;
r=pb;
pb=pb->next;
}
r->next=NULL;
return hc;
}
void print(linklist *head)
{
linklist *p=head->next;
while(p)
{
printf("%d->",p->data);
p=p->next;
}
return;
}
int main()
{
linklist *ha=creatlinklist();
linklist *hb=creatlinklist();
linklist *hc=connect(ha,hb);
print(hc);
return 0;
}
http://hi.baidu.com/yangkunarsenal/item/2be38d35a6d40287c3cf296e