首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下: { int m_nKey; ListNode* m_pNext; };
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下: { int m_nKey; ListNode* m_pNext; };
admin
2019-03-29
83
问题
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:
{
int m_nKey;
ListNode* m_pNext;
};
选项
答案
/////////////////////////////////////////////////////////////////////// // Reverse a list iteratively // Input: pHead - the head of the original list // Output: the head of the reversed head /////////////////////////////////////////////////////////////////////// ListNode* ReverseIteratively(ListNode* pHead) { ListNode* pReversedHead = NULL; ListNode* pNode = pHead; ListNode* pPrev = NULL; while(pNode != NULL) { // get the next node, and save it at pNext ListNode* pNext = pNode->m_pNext; // if the next node is null, the currect is the end of original // list, and it’s the head of the reversed list if(pNext == NULL) pReversedHead = pNode; // reverse the linkage between nodes pNode->m_pNext = pPrev; // move forward on the the list pPrev = pNode; pNode = pNext; } return pReversedHead; }
解析
这是一道广为流传的微软面试题。由于这道题能够很好的反应出程序员思维是否严密,在微软之后已经有很多公司在面试时采用了这道题。
为了正确地反转一个链表,需要调整指针的指向。与指针操作相关代码总是容易出错的,因此最好在动手写程序之前作全面的分析。在面试的时候不急于动手而是一开始做仔细的分析和设计,将会给面试官留下很好的印象,因为在实际的软件开发中,设计的时间总是比写代码的时间长。与其很快地写出一段漏洞百出的代码,远不如用较多的时间写出一段健壮的代码。
为了将调整指针这个复杂的过程分析清楚,我们可以借助图形来直观地分析。假设下图中l、m和n是三个相邻的结点:
a?b?…?l mànà…
假设经过若干操作,我们已经把结点l之前的指针调整完毕,这些结点的m_pNext指针都指向前面一个结点。现在我们遍历到结点m。当然,我们需要把调整结点的m_pNext指针让它指向结点l。但注意一旦调整了指针的指向,链表就断开了,如下图所示:
a?b?…l?m nà…
因为已经没有指针指向结点n,我们没有办法再遍历到结点n了。因此为了避免链表断开,我们需要在调整m的m_pNext之前要把n保存下来。
接下来我们试着找到反转后链表的头结点。不难分析出反转后链表的头结点是原始链表的尾位结点。什么结点是尾结点?就是m_pNext为空指针的结点。
转载请注明原文地址:https://kaotiyun.com/show/7xmZ777K
0
程序员面试
相关试题推荐
Weakdollarorno,$46,000—thepriceforasingleyearofundergraduateinstructionamidtheredbrickofHarvardYard—is【C1】__
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历
如何通过ADO.NET读取数据库中的图片?
n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。
把用户状态设置为忙碌。
为拨号网络创建快捷方式。
利用D盘窗口,查看WindowsXP已经注册的文件类型,找到"Flash影片"类型。
Word的样式是一组巳命名的字符和()格式的组合。
软盘写保护的作用是()。A.防止持签B.防止读盘C.防止显示D.防止写盘
在实际应用中,用户通常依靠评价程序来测试系统的性能。以下评价程序中,(16)的评测准确程度最低。事务处理性能委员会(TransactionProcessingPerformanceCouncil,TPC)是制定商务应用基准程序(Benchmark)标
随机试题
Twelveyearsago,oceanographerCaptainCharlesMoorewasskipperinghisyachttheAlguitaintheNorthPacific.Hesailedinto
男婴,12天。拒奶、少尿、体温不升10小时急诊人院。查体:重病容,面色苍白,前囟平,颈软,心音低钝,双肺未闻及哕音,腹胀,肝右肋下3.5cm,脐有少许分泌物。实验室检查:血WBC5.0×109/L,N0.70,L0.30。最可能的诊断是
案情:朱某买了一处房子,办理房屋过户手续后,满心欢喜搬进新房居住。不料,该房却是房主通过中介公司出租给他人的。租房者伪造了全套房产材料,甚至骗过北京市建委,将房屋过户出售。事发后,原房主状告北京市建委,法院一纸撤销判决,令崭新的房产证变成了废纸。无奈之下,
建筑物内消防及其他防灾用电设备,应在下列哪一处设自动切换装置?()
某客户总资产100万元,年度到期负债总和10万元(到期债务与应付利息之和)、长期负债30万元,本年度收入20万元,则负债收入比例为()
采用定额比例法分配完工产品和月末在产品费用,应具备的条件有()。
甲、乙、丙依次比邻而居。甲为修房向乙提出要在其院内堆放建材,但是乙不允许。甲又向丙提出,丙同意,但要求甲支付100元使用费,并且堆放不能超过半个月,甲也同意。甲在修房的过程中必须从乙门前经过,乙企图予以阻拦。请问:要求甲支付100元费用,并且不能堆
【B1】【B5】
StoppingSmoking:ASH’s15Tips—ActiononSmokingandHealth1.GetProfessionalHelpRingthehelplineonFreephone0
WiredforDistraction:KidsandSocialMedia?A)Mostparentswhoworryabouttheirkids’onlineactivityfocusonthepeopleor
最新回复
(
0
)