首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

面试被bs的一道题解决方法

2012-03-08 
面试被bs的一道题最近更新了下简历,居然接到电话被邀请去面试。虽然最近没有打算跳槽,抱着看看去的念头,然

面试被bs的一道题
      最近更新了下简历,   居然接到电话被邀请去面试。虽然最近没有打算跳槽,   抱着看看去的念头,   然而最终被bs,   铩羽而归。
      废话少说,   言归正传。   开始还比较顺利,   最后面试的人给了一道题,   其实也不难,   就是如何倒转单链表。   不允许数组存储,   可以使用局部变量。
      这道题的陷阱就在于在倒转过程中,   指针的倒转会导致链的断开。   其实很简单的一道题,   可是由于当时紧张,   本来就不擅长指针的我,当时还妄想通过最少的局部变量来达到目的,   最后费时很多不说,   还是掉到陷阱。
      回来想想,   终有不甘   ,其实这么简单的题:
      给定pHeader,   要求返回倒转后的头指针:

POINTER   AdverseSingleLink(POINTER   pHeader)
{
          POINTER   pPrevious,   pCur,   pNext;
          pPrecious   =   pHeader;
          pCur   =   pPrecous-> next;
   
          while(pCur-> next)
        {
            pNext   =   pCur-> next;
            pCur-> next   =   pPrevious;
            pPrevious   =   pCur;
            pCur   =   pNext;
        }
        pHeader   =   pCur;
        return   pHeader;
  }

在程序中用到了3个临时变量,   似乎都不能省略。   一个变量用来表示当前变量;需要一个临时变量存储当前指针的后一位置pNext,   便于下次移动;   移动后,与前面的指针已经断开链接了,   需要一个指针在移动前保存当前位置。

由于参数中带有一个变量,   可以用起取代新增的一个变量,   但那样的话会降低程序的可读性。

若有更多意见,欢迎指正!

[解决办法]
你说的对,要三个局部变量,但是你的代码遇到一个节点的链表就会出错。
[解决办法]
程序有问题: 

POINTER AdverseSingleLink(POINTER pHeader) 

POINTER pPrevious, pCur, pNext; 
pPrecious = NULL;
pCur = pHeader;

while(pCur-> next) 

pNext = pCur-> next; 
pCur-> next = pPrevious; 
pPrevious = pCur; 
pCur = pNext; 

pHeader = pCur; 
return pHeader; 

热点排行