其他分享
首页 > 其他分享> > [剑指offer]面试题17:合并两个排序的链表

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

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