合并排序链表(剑指offer)
struct listNode { //定义链表头节点
int m_nValue;
listNode * m_pNext;
}
listNode * mergeList (listNode * pHeadList1,listNode * pHeadList2)
{
if (pHeadList1 == NULL) {return pHeadList2;} //判断指针是否为空
if (pHeadList2==NULL) {return pHeadList1;}
listNode * pMergeListHead=NULL;//合并后的节点
if(pHeadList1->m_nValue < pHeadList2->m_nValue)
{
pMergeListHead->m_nValue=pHeadList1->m_nValue;
pMergeListHead->m_pNext=mergeList(pHeadList1->m_pNext,pHeadList2);//递归
}
else
{
pMergeListHead->m_nValue=pHeadList2->m_nValue;
pMergeListHead->m_pNext=mergeList(pHeadList1,pHeadList2->m_pNext);
}
return pMergeListHead;
}
//因为每次都是头节点比较,故可以考虑递归算法,只要保证有效的结束条件,就可完成。