首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下: { int m_nKey; ListNode* m_pNext; };
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下: { int m_nKey; ListNode* m_pNext; };
admin
2019-03-29
141
问题
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:
{
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
程序员面试
相关试题推荐
______mancannowcreateradioactiveelements,thereisnothinghecandotoreducetheirradioactivity.
RememberNapsterorGrokster?Bothservicesalloweduserstosharecomputerfiles—usuallydigitalmusic—thatinfringedthecopyr
.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
UDP连接和TCP连接的异同。
把远程的辽宁大学“game”的文件夹删除。
设置拨号连接属性使得用户在使用拨号连接时需要使用我的Windows登录名和密码。
更改邮件到达后应用规则“若发件人包含‘mary@sina.com’转发到wangtao@sina.com”为应用规则“若发件人包含‘mary@sina.com’转发到wanglong@lnu.edu.cn”。
在远程服务器中名为“2.10”的文件夹下建立一个新目录,名为fit。
软件设计中,有利于提高模块独立性的一个准则是______。
在实际应用中,用户通常依靠评价程序来测试系统的性能。以下评价程序中,(16)的评测准确程度最低。事务处理性能委员会(TransactionProcessingPerformanceCouncil,TPC)是制定商务应用基准程序(Benchmark)标
随机试题
阅读下面的文字,回答问题。窗前的树我家窗前有一棵树。那是一棵高大的洋槐。树冠差不多可达六层的楼顶。粗壮的树干与三层的阳台相齐,碧绿而茂密的树叶部分,恰好正对着我四楼的窗户。坐在我的书桌前,一树浓荫收入眼底。从春到秋,由晨至夜,任是着意的或是不经
按孔隙成因,凡是在沉积和沉岩过程中形成的孔隙称为()
新生儿出生,Apgar评分为4分,首选的处理为
来访者询问:“我该与谁结婚?”治疗师不予明确答复,这属于心理治疗原则中的
某建设工程业主将土建、安装、装饰装修等若干单位工程分别发包给甲、乙、丙三家施工单位,则对于甲、乙、丙三家施工单位之间的关系,正确的表述是()。
把正整数写成则35在第几行第几列?
下列说法正确的是()。
关于法律部门的特征,说法正确的是()
Economistsusedtothinkwealthcamefromacombinationofman-maderesources(roads,factories,telephonesystems),humanresour
Nevertalkaboutthatrestaurantinfrontofme.Itis______satisfactory.
最新回复
(
0
)