小菜鸡的刷题经验
在此题中,需要先讨论L1为空或L2为空或均为空的情况,否则会出现runtime error的报错,因为当一个链表为空的时候会出现越界情况
(产生runtime error的几个原因:
①除以零;
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free§; *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000]。
)
这个题中可以先定义一个head节点(哨兵节点)用于储存结论所需的有序链表,指针p用于输出较小元素。
下面是源码:
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
if(l1==NULL&&l2==NULL)
{
return NULL;
}
else if(l1==NULL)
{
return l2;
}
else if(l2==NULL)
{
return l1;
}
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* p = head;
while(l1 && l2)
{
if(l1->val <= l2->val)
{
p->next = l1;
l1 = l1->next;
}
else
{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
if(l1)
p->next = l1;
if(l2)
p->next = l2;
return head->next;
}