两个单向有序链表的归并算法
Code
//递归算法
NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)
{
NodePtr p1;
p1=NULL;
if(one_head == NULL && two_head == NULL)
return p1;
else if(one_head == NULL && two_head != NULL)
return two_head;
else if(one_head != NULL && two_head == NULL)
return one_head;
else
{
if(one_head->data <= two_head->data)
{
p1=one_head;
p1->link = merge_lists(one_head->link,two_head);
}
else
{
p1=two_head;
p1->link = merge_lists(one_head,two_head->link);
}
return p1;
}
}
//迭代算法
NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)
{
if(one_head == NULL)
return two_head;
if(two_head == NULL)
return one_head;
NodePtr head = NULL;
if(one_head->data < two_head->data)
{
head = one_head;
one_head = one_head->link;
}
else
{
head = two_head;
two_head = two_head->link;
}
NodePtr current_Ptr = head;
while(one_head !=NULL && two_head !=NULL)
{
if(one_head->data <= two_head->data)
{
current_Ptr->link = one_head;
current_Ptr = one_head;
one_head = one_head->link;
}
else
{
current_Ptr->link = two_head;
current_Ptr = two_head;
two_head = two_head->link;
}
}
if(one_head != NULL)
current_Ptr->link = one_head;
if(two_head != NULL)
current_Ptr->link = two_head;
return head;
}
//递归算法
NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)
{
NodePtr p1;
p1=NULL;
if(one_head == NULL && two_head == NULL)
return p1;
else if(one_head == NULL && two_head != NULL)
return two_head;
else if(one_head != NULL && two_head == NULL)
return one_head;
else
{
if(one_head->data <= two_head->data)
{
p1=one_head;
p1->link = merge_lists(one_head->link,two_head);
}
else
{
p1=two_head;
p1->link = merge_lists(one_head,two_head->link);
}
return p1;
}
}
//迭代算法
NodePtr merge_lists(NodePtr& one_head,NodePtr& two_head)
{
if(one_head == NULL)
return two_head;
if(two_head == NULL)
return one_head;
NodePtr head = NULL;
if(one_head->data < two_head->data)
{
head = one_head;
one_head = one_head->link;
}
else
{
head = two_head;
two_head = two_head->link;
}
NodePtr current_Ptr = head;
while(one_head !=NULL && two_head !=NULL)
{
if(one_head->data <= two_head->data)
{
current_Ptr->link = one_head;
current_Ptr = one_head;
one_head = one_head->link;
}
else
{
current_Ptr->link = two_head;
current_Ptr = two_head;
two_head = two_head->link;
}
}
if(one_head != NULL)
current_Ptr->link = one_head;
if(two_head != NULL)
current_Ptr->link = two_head;
return head;
}