13--2. 两数相加

【首先,题目是给了两个链表,我们可以直接使用哦】

  • 我们要自己创建一个链表来存储结果
//将第一个节点的值初始化为0,用来指向头指针(意思就是pre后面的那个值才是头指针),返回结果
LinkNode pre = new LinkNode(0);
// cur是一个可移动的指针,作为储存两个数之和的位置
LinkNode cur= pre;

 

  • 定义一个记录进位值的标记,初始化为0
int carry = 0;
  • 然后开始构建新的结果链表,使用while循环,确定循环跳出的条件:
    l1 != null || l2 != null
      • 补充:
        l1.val的写法时错误的,当我们判断一个节点是否为空时,需要检查节点对象本身是否为 null,而不是仅仅依靠节点的值属性(val)是否为 null。因为一个节点的值属性可以是非空的,但节点对象本身仍然可以为空。
    • l1.val  获取L1当前节点的值;
      l2.val  获取L2当前节点的值;
      
    • 通过相加计算sum的值
int sum = x + y + carry;
    • 进入结果链表的赋值阶段 
      •   首先先计算进位数(更新进位数)
      •   计算sum值,就是结果链表当前位置的值,
      •   创建一个新的节点,值为当前位的值
        // 更新进位值,将当前和除以 10,得到的商作为新的进位值
         carry = sum / 10; 
        // 更新当前位的值,将当前和对 10 取余,得到的余数作为当前位的值
         sum = sum % 10; 
        // 创建一个新的节点,值为当前位的值,连接到结果链表的末尾          
         cur.next = new ListNode(sum); 
    • 此节点赋值完毕,更新cur指针,更新L1指针,更新L2指针    (while循环体内容结束)
  cur = cur.next; // 更新 cur 指针,指向新创建的节点,以便下一次迭代
  if (l1 != null)
      l1 = l1.next; // 如果 l1 还有剩余节点,将 l1 指向下一个节点
  if (l2 != null)
      l2 = l2.next; // 如果 l2 还有剩余节点,将 l2 指向下一个节点
  • 在循环体外判断最后的进位是否为1,若为1,则最后一位补1
if (carry == 1) { // 最后的进位是否为 1,如果是,创建一个新的节点,值为进位值,连接到结果链表的末尾
            cur.next = new ListNode(carry);

【补充知识:】

  1. new ListNode()中的括号里面的参数含义

         

 2、

       

 3、

        

4、

            

posted @   翻斗花园小美Q  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示