void DeleteNode(ListNode** pListHead,ListNode* pToBeDeleted)
{
if(pListHead == NULL|| pToBeDeleted == NULL)
return;
if(pToBeDeleted->m_pnext != NULL)
{
ListNode* pNext = pToBeDeleted->m_pnext;
pToBeDeleted->m_nvalue = pNext->m_nvalue;
pToBeDeleted->m_pnext = pNext->m_pnext;
delete pNext;
pNext = NULL;
}
else if(pToBeDeleted == *pListHead)
{
delete pToBeDeleted;
pToBeDeleted = NULL;
*pListHead = NULL;
}
else
{
ListNode* pNode = *pListHead;
while(pNode->m_pnext != pToBeDeleted)
{
pNode = pNode->m_pnext;
}
pNode->m_pnext = NULL;
delete pToBeDeleted;
pToBeDeleted = NULL;
}
}
ListNode* FindKthToTail(ListNode* pListHead,unsigned int k)
{
if(pListHead==NULL||k==0)
{
return NULL;
}
ListNode* pAhead = pListHead;
ListNode* pBehind = NULL;
for(unsigned int i=0;i<k-1;++i)
{
if(pAhead->m_pnext != NULL)
{
pAhead = pAhead->m_pnext;
}
else
{
return NULL;
}
}
pBehind = pListHead;
while(pAhead != NULL)
{
pAhead = pAhead->m_pnext;
pBehind = pBehind->m_pnext;
}
return pBehind;
}
void ReverseList(ListNode* pHead)
{
if(pHead==NULL)
return ;
ListNode*p,*q;
p = pHead->m_pnext;
while(p!=NULL)
{
q = p->m_pnext;
p->m_pnext = pHead->m_pnext;
pHead->m_pnext = p;
p = q;
}
}
ListNode* Merge(ListNode *List1,ListNode *List2)
{
if(List1==NULL)
return List2;
else if(List2==NULL)
return List1;
ListNode* pMergedHead = NULL;
if(List1->m_nvalue<List2->m_nvalue)
{
pMergedHead = List1;
pMergedHead->m_pnext = Merge(List1->m_pnext,List2);
}
else
{
pMergedHead = List2;
pMergedHead->m_pnext = Merge(List1,List2->m_pnext);
}
return pMergedHead;
}