有序链表的归并
#include<stdio.h>
#include<stdlib.h>
struct node
{
int date;
struct node *next;
} *head1, *head2, *p, *q, *tail;
int main()
{
int m, n;
scanf("%d%d", &m, &n);
head1 = (struct node *)malloc(sizeof(struct node));
head1 -> next = NULL;
head2 = (struct node *)malloc(sizeof(struct node));
head2 -> next = NULL;
tail = head1;
while(m--)
{
p = (struct node *)malloc(sizeof(struct node));
scanf("%d", &p->date);
p -> next = NULL;
tail -> next = p;
tail = p;
}
tail = head2;
while(n--)
{
q = (struct node *)malloc(sizeof(struct node));
scanf("%d", &q->date);
q -> next = NULL;
tail -> next = q;
tail = q;
}
p = head1 -> next;
q = head2 -> next;
tail = head1;
free(head2);
while(p && q)
{
if(p -> date < q -> date)
{
tail -> next = p;
tail = p;
p = p -> next;
tail -> next = NULL;
}
else
{
tail -> next = q;
tail = q;
q = q -> next;
tail -> next = NULL;
}
}
if(p)
{
tail -> next = p;
}
else
{
tail -> next = q;
}
p = head1 -> next;
while(p != NULL)
{
if(p -> next != NULL)
{
printf("%d ", p -> date);
}
else
{
printf("%d\n", p -> date);
}
p = p -> next;
}
return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int date;
node *next;
};
node *head1,*head2,*p,*q,*r;
int main()
{
int n,m;
cin>>n>>m;
head1=new node;
head1->next=NULL;
head2=new node;
head2->next=NULL;
r=head1;
while(n--)
{
p=new node;
cin>>p->date;
p->next=NULL;
r->next=p;
r=p;
}
r=head2;
while(m--)
{
p=new node;
cin>>p->date;
p->next=NULL;
r->next=p;
r=p;
}
p=head1->next;
q=head2->next;
r=head1;
free(head2);
while(p&&q)
{
if(p->date<q->date)
{
r->next=p;
r=p;
p=p->next;
r->next=NULL;
}else {
r->next=q;
r=q;
q=q->next;
r->next=NULL;
}
}
if(p)
{
r->next=p;
}else {
r->next=q;
}
p=head1->next;
while(p)
{
cout<<p->date<<" ";
p=p->next;
}
return 0;
}