单链表的归并
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data;
struct Node *next;
}Node,*ListNode;
void CreatList (ListNode name,int n){
ListNode temp=name,p;
for(int i=0;i<n;i++)
{
p=(ListNode)malloc(sizeof(Node));
p->data = 0;
p->next = NULL;
temp->next =p;
temp=p;
}
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
ListNode A=(ListNode)malloc(sizeof(Node));
ListNode B=(ListNode)malloc(sizeof(Node));
CreatList(A,m);
CreatList(B,n);
ListNode a=A->next;
ListNode b=B->next;
while(a)
{
scanf("%d",&a->data);
a=a->next;
}
while(b)
{
scanf("%d",&b->data);
b=b->next;
}
ListNode atail=A->next;
ListNode btail=B->next;
ListNode answer=(ListNode)malloc(sizeof(Node));
ListNode temp=answer;
while(btail&&atail)
{
if(atail->data < btail->data)//b大
{
if(atail->next==NULL)
{
temp->next=atail;
atail=atail->next;
temp=temp->next;
temp->next=btail;
break;
}
if(btail->next==NULL)
{
temp->next=atail;
temp=temp->next;
atail=atail->next;
temp->next=btail;
temp=temp->next;
temp->next=atail;
break;
}
temp->next=atail;
temp=temp->next;
atail=atail->next;
}
else//a大
{
if(btail->next==NULL)
{
temp->next=btail;
btail=btail->next;
temp=temp->next;
temp->next=atail;
break;
}
if(atail->next==NULL)
{
temp->next=btail;
temp=temp->next;
btail=btail->next;
temp->next=atail;
temp=temp->next;
temp->next=btail;
break;
}
temp->next=btail;
temp=temp->next;
btail=btail->next;
}
}
int aaa[m+n];
for(int i=(m+n-1);i>=0;i--)
{
aaa[i]=answer->next->data;
answer=answer->next;
}
for(int i=0;i<m+n;i++)
{
printf("%d ",aaa[i]);
}
return 0;
}