题目:编写代码,移除未排序链表中的重复结点。如果不使用临时缓冲区,该怎么解决?
用两个指针解决这个问题,一个指针指向当前结点,一个指针在当前结点后面寻找和当前结点数值相等的结点,如果有则删除。
void DeleteRepetitiveNodes(ListNode* pHead)
{
if(pHead == NULL)
return;
for(ListNode* pNode = pHead; pNode != NULL; pNode = pNode->m_pNext)
{
ListNode* pCurr = pNode;
while(pCurr->m_pNext != NULL)
{
if(pCurr->m_pNext->m_nValue == pNode->m_nValue)
{
ListNode* repetitiveNode = pCurr->m_pNext;
pCurr->m_pNext = pCurr->m_pNext->m_pNext;
delete repetitiveNode;
repetitiveNode = NULL;
}
else
pCurr = pCurr->m_pNext;
}
}
}