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

Posted Wecccccccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[剑指offer]面试题17:合并两个排序的链表相关的知识,希望对你有一定的参考价值。

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

以上是关于[剑指offer]面试题17:合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章

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

《剑指offer》面试题17 合并两个排序的链表 Java版

剑指offer-面试题25-合并两个排序的链表-链表

剑指OFFER----面试题25. 合并两个排序的链表

剑指Offer对答如流系列 - 合并两个排序的链表

剑指offer 面试25题