题目:
输入两个递增排序的链表,合并这个两个链表并使得新链表中的结点仍然是按照递增排序的。
这个题目很简单,下面直接看代码,我用两种方式实现了题目的要求,递归的方法是书上写的,很短小,也很经典。非递归方法有大的冗余。
递归:
ListNode * Merge(ListNode * List1,ListNode * List2)
{
if(List1 == NULL)
return List2;
else if(List2 == NULL)
return List1;
ListNode * Head = NULL;
if((List1->m_nValue) < (List2->m_nValue) )
{
Head = List1;
Head->m_pNext = Merge(List1->m_pNext,List2);
}
else
{
Head = List2;
Head->m_pNext = Merge(List1,List2->m_pNext);
}
return Head;
}
非递归:
ListNode * MergeNoQianTao(ListNode * list1,ListNode * list2)
{
ListNode * Head = NULL;
ListNode * result = Head;
if(list1 == NULL)
return list2;
else if(list2 == NULL)
return list1;
if(list1->m_nValue > list2->m_nValue)
{
Head = list2;
result = Head;
list2 = list2->m_pNext;
if(list2 == NULL)
{
Head->m_pNext = list1;
return result;
}
}
else
{
Head = list1;
result = Head;
list1 = list1->m_pNext;
if(list1 == NULL)
{
Head->m_pNext = list2;
return result;
}
}
while(list1 != NULL && list2 != NULL)
{
if(list1->m_nValue < list2->m_nValue)
{
Head->m_pNext = list1;
Head = Head->m_pNext;
list1 = list1->m_pNext;
if(list1 == NULL)
{
Head->m_pNext = list2;
return result;
}
}
else
{
Head->m_pNext = list2;
Head = Head->m_pNext;
list2 = list2->m_pNext;
if(list2 == NULL)
{
Head->m_pNext = list1;
return result;
}
}
}
return result;
}