问题1: 运行超过运行时间,
解决:while 中对p1->next==null进行判断,有可能得在p==null后得到指向未知的地方
问题2:没有中间值
解决2:逻辑出错,刚开始以为对比两个链表的值,选取的是最大的那个,导致l1中后两个值无法被选出
问题3:结果多了一个头节点q的new中的1
解决3:将return值由q改为q->next,不输出new中的1
问题4:代码中前三行的异常判断,因为初始写为l1->next等,导致出现有可能只想未定义地方的结构体
解决4:按问题1的解决方式解决,本质应该是自己没搞清楚头节点和头指针的区别
问题5:少了最后一个值
解决5:未对有可能出现的l1,l2值进行判断,添加后,通过
完整通过代码如下:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
// ListNode* p;
ListNode *p =new ListNode(1);
ListNode* q=p; //q=p;
if((l1==NULL)&&(l2 == NULL))
{
return 0;
}
else if ((l1!=NULL)&&(l2==NULL))
{
return l1;
}
else if ((l2!=NULL)&&(l1==NULL))
{
return l2;
}
while((l2!=NULL)&&(l1!=NULL)){
if(l1->val>l2->val)
{
p->next=l2;
l2=l2->next;
}
else
{
p->next=l1;
l1=l1->next;
} p=p->next;
}
if(l1)
{
p->next =l1;
}
if(l2)
{
p->next=l2;
}
return q->next;
}
};