力扣第二题两数相加未发现力扣提示的错误。

问题遇到的现象和发生背景

有没有一种可能,力扣也有测试误诊断的时候?

问题相关代码,请勿粘贴截图

/**

  • Definition for singly-linked list.
  • struct ListNode {
  • int val;
    
  • ListNode *next;
    
  • ListNode() : val(0), next(nullptr) {}
    
  • ListNode(int x) : val(x), next(nullptr) {}
    
  • ListNode(int x, ListNode *next) : val(x), next(next) {}
    
  • };
  • /
    class Solution {
    public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2)
    {
      ListNode *h,*p=new ListNode();
      h=p;
      int sum=0,o=0;
      if((l1)&&(l2))
          sum=l1->val+l2->val;
      else if(l1)
          sum=l1->val;
      else if(l2)
          sum=l2->val;
      if(sum>9)
      {
          sum-=10;
          o=1;
      }
      p->val=sum;
      while((l1->next)||(l2->next)||o==1)
      {
          p->next=new ListNode(o);
          p=p->next;
          l1=l1->next;
          l2=l2->next;
          if((l1)&&(l2))
              sum=o+l1->val+l2->val;
          else if(l1)
              sum=o+l1->val;
          else if(l2)
              sum=o+l2->val;
          else
              sum=1;
          o=0;
          if(sum>9)
          {
              sum-=10;
              o=1;
          }
          p->val=sum;
      }
      return h;
    
    }
    };
    运行结果及报错内容
    Line 35: Char 20: runtime error: member access within null pointer of type 'ListNode' (solution.cpp)
    SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:44:20
    我的解答思路和尝试过的方法
    最开始使用的是通过乘法,还原数字并将l1和l2求和,将结果通过对10求余的方式还原成链表,我使用了long long数据类型来解决,长达11位的十进制数,结果因为计算精度丢失的原因(这我可控制不了)没能通过测试。
    于是,我就使用了上面的方法,运行结果指出链表节点有空指针,反复检查,还是没看出错在哪了。
    我想要达到的结果

class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* res=new ListNode();
        ListNode* prev=res;
        int jw = 0;
        ListNode* p1 = l1;
        ListNode* p2 = l2;
        //ListNode* p = nullptr;
        while (p1 != nullptr && p2 != nullptr) {
            ListNode* ptmp;
            int n = p1->val + p2->val + jw;
            jw = n / 10;
            n = n % 10;
            ptmp = new ListNode(n);
            prev->next=ptmp;
            prev=ptmp;
            p1 = p1->next;
            p2 = p2->next;
        }
        while (p1 != nullptr)
        {
            int n = p1->val + jw;
            jw = n / 10;
            n = n % 10;
            ListNode* ptmp = new ListNode(n);
            prev->next = ptmp;
            prev=ptmp;
            p1 = p1->next;
        }
        while (p2 != nullptr) {
            int n = p2->val + jw;
            jw = n / 10;
            n = n % 10;
            ListNode* ptmp = new ListNode(n);
            prev->next = ptmp;
            prev = ptmp;
            p2 = p2->next;
        }
        if (jw > 0) {
            ListNode* ptmp = new ListNode(jw);
            prev->next = ptmp;
        }
        return res->next;


    }
};

      else
{
          sum=1;
      o=0;
 }