将两个单链表合并,一般前提是两个单链表是已经排好序的,默认是按升序排列的。
#include <iostream>
using namespace std;
typedef struct LinkNode
{
int data;
struct LinkNode *next;
}node;
node *merg(node *head1,node *head2)
{
node *pa=head1->next;
node *pb=head2->next;
node *head =(node*)malloc(sizeof(node));
node *s = head;
while(pa&&pb)
{
if(pa->data>pb->data)
{
s->next = pb;
s = pb;
pb = pb->next;
}
else
{
s->next = pa;
s = pa;
pa=pa->next;
}
}
if(pa!=NULL&&pb==NULL)
{
while(pa)
{
s->next = pa;
s = pa;
pa = pa->next;
}
}
if(pa==NULL&&pb!=NULL)
{
while(pb)
{
s->next = pb;
s = pb;
pb=pb->next;
}
// s->next = pb;
}
s->next = NULL;
return head;
}
void display(node *head)
{
node *p = head->next;
while(p)
{
printf("%d",p->data);
p = p->next;
}
printf("\n");
}
node *create(int n)
{
node *head = (node*)malloc(sizeof(node));
node *p = head;
int x;
while(n)
{
printf("intput:data:");
node *s = (node*)malloc(sizeof(node));
scanf("%d",&x);
s->data = x;
p->next = s;
p = s;
n--;
}
p->next = NULL;
return head;
}
void main()
{
int n;
printf("input:n=");
scanf("%d",&n);
node *head1;
head1= create(n);
printf("input:n=");
scanf("%d",&n);
node *head2;
head2= create(n);
display(head1);
display(head2);
node *head;
head = merg(head1 ,head2);
display(head);
}