一、题目分析
这是一个递归的过程,每次都是链表剩余部分的第一个结点相比较,小的那个就放到新链表中;
思考:如果题目改成把可以将3整除的结点放到前边呢?只需要把判断条件写成一个功能函数就可以了
二、代码分析
注意如果不对输入的空链表参数加以判断,会造成程序奔溃
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if( pHead1 == NULL)
{
return pHead2;
}
if( pHead2 == NULL)
{
return pHead1;
}
ListNode *newNode = NULL;
if( pHead1->val > pHead2->val)//如果pHead2的值更小
{
newNode = pHead2;
pHead2 = pHead2->next;
newNode->next = Merge(pHead1, pHead2);
}else//如果pHead2的值更小
{
newNode = pHead1;
pHead1 = pHead1->next;
newNode->next = Merge(pHead1, pHead2);
}
return newNode;
}
};