读书人

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

发布时间: 2012-03-08 13:30:13 作者: rapoo

面试被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;
}

读书人网 >软件架构设计

热点推荐