当前位置: 代码迷 >> C语言 >> [方法已公布]今天去了一家游戏公司面试,笔试时遇到个有趣的问题,跟大家分 ...
  详细解决方案

[方法已公布]今天去了一家游戏公司面试,笔试时遇到个有趣的问题,跟大家分 ...

热度:97   发布时间:2008-02-18 19:41:07.0
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-2-18 19:39 的发言:[/bo]

3#的答案正确


恩,我知道,他是正确的。
----------------解决方案--------------------------------------------------------
欢迎当然欢迎(就是不明白你在5楼的话是啥意思 就为这).
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]xianshizhe111[/un] 在 2008-2-18 20:08 的发言:[/bo]

欢迎当然欢迎(就是不明白你在5楼的话是啥意思 就为这).


现在原本4楼的答案删掉了,我是指楼上我说过的话,想说原本4楼的答案不符合题意罢了。
----------------解决方案--------------------------------------------------------
LZ你的答案也没错....xianshizhe111是个很好的朋友.互相学习.共同进步
我写了验证的小代码...
#include"stdio.h"
#include"malloc.h"
struct Node {
    int i;
    struct Node *pPrev;
    struct Node *pNext;
};
main()
{   struct Node *p1,*p2,*p3,*pDel,*ph;
    p1=(struct Node*) malloc(sizeof(struct Node));
    p1->i=1;
    p2=(struct Node*) malloc(sizeof(struct Node));
    p2->i=2;
    p3=(struct Node*) malloc(sizeof(struct Node));
    p3->i=3;

    p1->pNext=p2;
    p1->pPrev=p3;
    p2->pNext=p3;
    p2->pPrev=p1;
    p3->pNext=p1;
    p3->pPrev=p2;
    ph=p1;

while(ph->pNext!=p1)
{
    printf("%d",ph->i);
    ph=ph->pNext;
}    
printf("%d",ph->i);
pDel=p2;

pDel->pPrev->pNext = pDel->pNext;
pDel = pDel->pPrev;
delete pDel->pNext->pPrev;
pDel = (pDel->pNext->pPrev = pDel)->pNext;
ph=p1;
while(ph->pNext!=p1)
{
    printf("%d",ph->i);
    ph=ph->pNext;
    
}
printf("%d",ph->i);
}
本帖最近评分记录
  • yuki +4 忘了给你了,这活不让你白干。 ... 2008-2-18 20:56
2008-02-18 12:11:59
Knocker

等 级:贵宾
威 望:40
帖 子:10377
专家分:280
注 册:2004-6-1
  得分:0 
del->pPrev->pNext = del->pNext;
   del->pNext->pPrev = del->pPrev;

   delete del;
----------------解决方案--------------------------------------------------------
不知道对不对
----------------解决方案--------------------------------------------------------
看错了,没注意第二点
----------------解决方案--------------------------------------------------------
想笑就笑 干吗那样,天天就知道笑[bc10]
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]sunkaidong[/un] 在 2008-2-18 20:11 的发言:[/bo]

LZ你的答案也没错....xianshizhe111是个很好的朋友.互相学习.共同进步
我写了验证的小代码...
#include"stdio.h"
#include"malloc.h"
struct Node {
    int i;
    struct Node *pPrev;
    struct Node *pNext;
};
ma ...


有劳您费神还写一个程序,其实分析这个的时候,一般画个图把,比较直观;
Step0 = [n1]<->[n2/pDel]<->[n3] : 初始化
Step1 = [n1]->[n3], [n2]<-[n3] : pDel->pPrev->pNext = pDel->pNext;
Step2 = [n1/pDel]->[n3], [n2]<-[n3] : pDel = pDel->pPrev;
Step3 = Remove ==> ([n1/pDel]->[n3], [n2]<-[n3]) : delete pDel->pNext->pPrev;
Step4 = [pDel] <== ([n1/pDel]->[n3], [pDel]<-[n3])->[n3] : pDel = (pDel->pNext-pPrev = pDel)->pNext;

毕竟不是用笔画,可能有点难看懂
其中->表示后继结点,<-表示前驱结点
==> 表示操作施加(左边操作名,右边数据)
<== 数据传输
, 表示两个操作分割
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]Knocker[/un] 在 2008-2-18 20:16 的发言:[/bo]

del->pPrev->pNext = del->pNext;
   del->pNext->pPrev = del->pPrev;

   delete del;


老K乱来了,注意题目
----------------解决方案--------------------------------------------------------
  相关解决方案