|
|
发表于 2006-11-3 12:52:00
|
显示全部楼层
Re:小弟提供一数据结构题目,以供娱乐
下面是个 3n 的算法:
假设是不循环的,也就是最后一个pNext是NULL, 写的仓促,希望大家能看的明白。
其实 2N 的算法也有,不过前提是 sizeof(int) = sizeof(Node *),需要Data储存一个指针,或者Data有取值范围。也许有其他 2N 算法不需要Data的,不过偶没想出来。不过循环链表到是有不需要前提条件的2N算法。至于N的算法。。。。。。。。那就不知道了。
Node* copy(Node* pHead)
{
if(!pHead) return NULL;
Node * pCurNode = pHead;
Node * pTemp;
do
{
pTemp = new Node();
pTemp ->data = pCurNode ->data;
pTemp ->pNext = pCurNode ->pRandom;
pCurNode ->pRandom = pTemp;
} while(pCurNode = pCurNode->pNext)
pCurNode = pHead;
do {
pCurNode->pRandom->pRandom = pCurNode->pRandom->pNext->pRandom;
} while(pCurNode = pCurNode->pNext);
pCurNode = pHead;
Node TempHead;
pTemp = &TempHead;
do {
pTemp->pNext = pCurNode->pRandom;
pTemp = pCurNode->pRandom;
pCurNode->pRandom = pCurNode->pRandom->pNext;
} while(pCurNode = pCurNode->pNext);
return TempHead->pNext;
} |
|