递归方法:
struct Node
{
int data;
Node *next;
};
Node *Merge(Node *head1,Node *head2)
{
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
Node *head=NULL;
if(head1-> data <head2-> data)
{
head=head1;
head->next=Merge(head1->next,head2);
}
else
{
head=head2;
head->next=Merge(head1,head2->next);
}
return head;
}
非递归方法:
-
Node * Merge(Node *head1 , Node *head2)
-
{
-
if ( head1 == NULL)
-
return head2 ;
-
if ( head2 == NULL)
-
return head1 ;
-
Node *head = NULL ;
-
Node *p1 = NULL;
-
Node *p2 = NULL;
-
if ( head1->data < head2->data )
-
{
-
head = head1 ;
-
p1 = head1->next;
-
p2 = head2 ;
-
}
-
else
-
{
-
head = head2 ;
-
p2 = head2->next ;
-
p1 = head1 ;
-
}
-
Node *pcurrent = head ;
-
while ( p1 != NULL && p2 != NULL)
-
{
-
if ( p1->data <= p2->data )
-
{
-
pcurrent->next = p1 ;
-
pcurrent = p1 ;
-
p1 = p1->next ;
-
}
-
else
-
{
-
pcurrent->next = p2 ;
-
pcurrent = p2 ;
-
p2 = p2->next ;
-
}
-
}
-
if ( p1 != NULL )
-
pcurrent->next = p1 ;
-
if ( p2 != NULL )
-
pcurrent->next = p2 ;
-
return head ;
-
}
-