1. 递归实现
typedef struct node{
int value;
struct node *next;
}Node, *pNode;
//采用递归的方法实现
Node *SingleListMerge(Node *head1,Node *head2)
{
if(head1==NULL)
return head2;
if(head2==NULL)
return head1;
Node *head=NULL;
if(head1->value < head2->value)
{
head=head1;
head->next=SingleListMerge(head1->next,head2);
}
else
{
head=head2;
head->next=SingleListMerge(head1,head2->next);
}
return head;
}
2. 非递归实现
//采用非递归的方法实现
Node *SingleListMergeNonRecur( Node *head1,Node *head2 )
{
if( head1 == ULL )
{
return head2;
}
if( head2 == NULL )
{
return head1;
}
Node *head = NULL;//合并后的头指针
Node *headTmp1 = NULL;//headTmp1 用于扫描链表1
Node *headTmp2 = NULL;//headTmp2 用于扫描链表2
if(head1->value > head2->value)
{
head = head1;
headTmp1 = head1->next;
}
else
{
head = head1;
headTmp2 = head2->next;;
}
Node *NewHead = head;//NewHead永远指向最新合并的结点
while( headTmp1 && headTmp2 )//如果循环停止,则headTmp1或headTmp2至少有一个为NULL
{
if(headTmp1->value > headTmp2->value)
{
NewHead->next = headTmp1;
headTmp1 = head1->next;
}
else
{
NewHead->next = headTmp1;
headTmp2 = head2->next;;
}
NewHead = NewHead->next;
}
if( headTmp1 )
{
NewHead->next = headTmp1;
}else{
NewHead->next = headTmp2;
}
return head;
}