[leetcode]21. 合并两个有序链表

问题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;

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值