游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4321|回复: 12

小弟提供一数据结构题目,以供娱乐

[复制链接]

30

主题

398

帖子

403

积分

中级会员

Rank: 3Rank: 3

积分
403
QQ
发表于 2006-11-2 18:57:00 | 显示全部楼层 |阅读模式
现有一链表,拥有一个指向下一个元素的指针pNext,还有一个随机指向的指针pRandom,现在需要拷贝这样一个链表,请给出最优解。
假设数据结构如下:
struct Node
{
  int data;
  Node* pNext;
  Node* pRandom;
};

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-11-2 19:49:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

pRandom应该是指想链表内的一个node,这个条件说明确点。
还有,最优解,算法复杂度最优,时间最优还是特定情况下实际执行速度最优?

8

主题

310

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
发表于 2006-11-2 21:51:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

随机指向的指针
有意思,研究研究

4

主题

66

帖子

66

积分

注册会员

Rank: 2

积分
66
发表于 2006-11-2 21:55:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

我记得你说,你为了努力回答任何新手问题的。.....
    怎么变成考新手题目了?

30

主题

398

帖子

403

积分

中级会员

Rank: 3Rank: 3

积分
403
QQ
 楼主| 发表于 2006-11-2 22:16:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

我也要发展的嘛,我不发展,怎么回答新手问题呢?

30

主题

398

帖子

403

积分

中级会员

Rank: 3Rank: 3

积分
403
QQ
 楼主| 发表于 2006-11-3 11:15:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

没人做么?哎……

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 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;
}

8

主题

310

帖子

311

积分

中级会员

Rank: 3Rank: 3

积分
311
QQ
发表于 2006-11-3 16:30:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

认真学习ing

30

主题

398

帖子

403

积分

中级会员

Rank: 3Rank: 3

积分
403
QQ
 楼主| 发表于 2006-11-3 17:28:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

假如旧链表是ABCDEF……
新构造的链表是A'B'C'D'E'F'……

构造新链表是使得A->pNext = A';A'->pNext = B;
即变换为如下链表
AA'BB'CC'DD'EE'FF'……

那么 A'->pRandom = A->pRandom->pNext;
依此类推

最后分拆链表

故得

这个方法或许比较明了一点,不过还是O(N)的算法。

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2006-11-8 18:38:00 | 显示全部楼层

Re:小弟提供一数据结构题目,以供娱乐

呵呵顶一个~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 04:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表