ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[剑指offer]面试题17:合并两个排序的链表

2021-05-19 13:03:55  阅读:130  来源: 互联网

标签:面试题 ListNode 17 结点 链表 pHead1 pHead2 pMergedHead


面试题17:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2,则合并之后的升序链表如链表3所示。链表结点定义如下:

struct ListNode
{
	int value;
	ListNode *next;
};

代码如下:

ListNode *Merge(ListNode *pHead1, ListNode *pHead2)
{
	if (pHead1 == nullptr) return pHead2;
	else if (pHead2 == nullptr) return pHead1;

	ListNode *pMergedHead = nullptr;

	if (pHead1->value < pHead2->value)
	{
		pMergedHead = pHead1;
		pMergedHead->next = Merge(pHead1->next, pHead2);
	}
	else
	{
		pMergedHead = pHead2;
		pMergedHead->next = Merge(pHead1, pHead2->next);
	}

	return pMergedHead;
}

测试用例:
● 功能测试(输入的两个链表有多个结点,结点的值互不相同或者存在值相等的多个结点)。
● 特殊输入测试(两个链表的一个或者两个头结点为 NULL 指针、两个链表中只有一个结点)。
本题考点:
● 考查应聘者分析问题的能力。解决这个问题需要大量的指针操作,应聘者如果没有透彻地分析问题形成清晰的思路,那么他很难写出正确的代码。
● 考查应聘者能不能写出鲁棒的代码。由于有大量指针操作,应聘者如果稍有不慎就会在代码中遗留很多与鲁棒性相关的隐患。建议应聘者在写代码之前全面分析哪些情况会引入空指针,并考虑清楚怎么处理这些空指针。

标签:面试题,ListNode,17,结点,链表,pHead1,pHead2,pMergedHead
来源: https://blog.csdn.net/m0_51955470/article/details/117024432

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有