算法-中等-链表-两数相加

记录一下算法题的学习11

两数相加

题目:给你两个非空的链表,表示两个非负 的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
思路

  • 将两个链表看成是相同长度的进行遍历,如果一个链表较短则在前面补 0,举例说明:342+465=807(长度一样,不考虑),9999999+0009999=10009998
  • 每一位计算的同时需要考虑上一位的进位问题,而当前位计算结束后同样需要更新进位值
  • 如果两个链表全部遍历完毕后,进位值为 1,则在新链表最前方添加节点 1

示例分析 1

复制代码
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]

示例分析2

复制代码
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]

代码展示

java 复制代码
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
      ListNode head=new ListNode(0);//初始化头结点为0
      ListNode tail=head;//初始化尾节点为0
      int carry=0;//初始化进位为0
      while(l1!=null||l2!=null){
          int x=l1!=null?l1.val:0;//三元运算符进行判断,例如如果x=li的情况下节点不为空,那么就选择l1.val,否则节点值为0;
          int y=l2!=null?l2.val:0;
          int sum=x+y+carry;
           //这里的判断很重要
          carry=sum/10; //当两个链表中两数相加得到超过十的值是,即carry=1,下一个两数相加就会进1,否则仍是0
          sum=sum%10;//当两个链表中两数相加得到超过十的值或则仍小于10,他只要除以10的余数

          tail.next=new ListNode(sum); //存入链表
          tail=tail.next;
          if(l1!=null){
              l1=l1.next;
          }
          if(l2!=null){
              l2=l2.next;
          }
      }
      if(carry>0){
          tail.next=new ListNode(carry);
      }
      return head.next;
    }
}

结束拜拜!

相关推荐
TT哇13 分钟前
【数据结构】经典题
数据结构
larryyu_cs18 分钟前
CF1494F Delete The Edges 题解
c++·算法·图论
城南vision40 分钟前
算法题总结(三)——滑动窗口
数据结构·算法
Jurio.41 分钟前
【JPCS出版】第二届应用统计、建模与先进算法国际学术会议(ASMA2024,9月27日-29)
大数据·人工智能·深度学习·算法·机器学习·数学建模
严文文-Chris42 分钟前
【算法-基数排序】
数据结构·算法·排序算法
Mephisto.java43 分钟前
【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣965, 2331, 100, 1379
算法·leetcode·深度优先
橙意满满的西瓜大侠43 分钟前
二叉树(一)高度与深度
数据结构
咕咕吖1 小时前
插入排序详解
数据结构·c++·算法
luthane1 小时前
python 实现bailey borwein plouffe算法
开发语言·python·算法
郭小儒1 小时前
代码随想录算法训练营第3天|链表理论基础、203. 移除链表元素、 707.设计链表、 206.反转链表
数据结构·算法·链表