面试题:合并两个有序链表,合并之后需要变为有序
对于此题,我想到的有两种解法:递归和非递归
递归实现:
//递归
Node *MergeList(Node *pHead1, Node*pHead2)
{
if (pHead1 == NULL)
return pHead2;
else if (pHead2 == NULL)
return pHead1;
else
{
Node*pHead = NULL;
if(pHead1->_data <= pHead2->_data )
{
pHead = pHead1;
pHead->_next = MergeList(pHead1->_next, pHead);
}
else
{
pHead = pHead2;
pHead->_next = MergeList(pHead1, pHead2->_next );
}
}
return pHead;
}
非递归实现:
//非递归
Node *MergeList(Node*pHead1, Node*pHead2)
{
Node*cur = NULL;
Node*pHead = NULL;
if (pHead1 == NULL)
pHead= pHead2;
else if (pHead2 == NULL)
pHead=pHead1;
else
{
if (pHead1->_data <= pHead2->_data)
{
pHead = pHead1;
pHead1 = pHead1->_next;
}
else
{
pHead = pHead2;
pHead2 = pHead2->_next;
}
cur = pHead;
while (pHead1 != NULL&&pHead2 != NULL)
{
if (pHead1->_data <= pHead2->_data)
{
cur->_next = pHead1;
pHead1 = pHead1->_next;
}
else
{
cur->_next = pHead2;
pHead2 = pHead2->_next;
}
cur = cur->_next;
}
if (pHead1 == NULL)
cur->_next = pHead1;
else
cur->_next = pHead2;
}
}