electromechanica 2022-08-16 01:14 采纳率: 73.3%
浏览 51
已结题

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

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

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

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

/**

  • 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位的十进制数,结果因为计算精度丢失的原因(这我可控制不了)没能通过测试。
    于是,我就使用了上面的方法,运行结果指出链表节点有空指针,反复检查,还是没看出错在哪了。
    我想要达到的结果
  • 写回答

2条回答 默认 最新

  • 真相重于对错 2022-08-16 10:29
    关注
    
    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;
    
    
        }
    };
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月24日
  • 已采纳回答 8月16日
  • 创建了问题 8月16日

悬赏问题

  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因