LeetCode热题100 刷题笔记(第三天)链表 「两数相加」

前言

这几天不是在写文章总结黑马点评吗,感觉敲代码的能力确实有点欠缺了,主要是敲项目代码的时候,接入了AI,大部分代码都是直接按Tab键自动生成的,代码能力确实有一点退步了🤪🤪🤪,这几天学学数据结构,刷刷题🏄🏄🏄,冲冲冲一天一道,(但是我感觉可能坚持不下去🤪)

题目

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:

  • 输入:l1 = 0, l2 = 0
  • 输出:0

示例 2:

  • 输入:l1 = 9,9,9,9,9,9,9, l2 = 9,9,9,9
  • 输出:8,9,9,9,0,0,0,1
java 复制代码
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
  //1. 创建哑节点, 方便处理链表头节点的边界情况
  ListNode dummyHead = new ListNode(-1);
  //2. 用cur指针遍历并构建结果链表
  ListNode cur = dummyHead;
  //3.temp存储进位值(0或1)
  int temp = 0;
  //4.循环条件: 只要l1,l2为遍历完就继续计算
  while (l1 != null || l2 != null || temp != 0 ) {
    //5. 取当前节点的值, 若节点为空则取 0
    int val1 = l1 == null ? 0 : l1.val;
    int val2 = l2 == null ? 0 : l2.val;
    //6. 计算当前节位的总和 (当前两数 + 进位)
    temp += val1;
    temp += val2;

    //7. 生成新节点, 存储当前的结果
    ListNode node = new ListNode(temp % 10);
    //8. 将新节点接入结果链表
    cur.next = node;
    //9.cur指针后移准备下一个节点
    cur = cur.next;
    //10. 更新进位
    temp /= 10;
    //11. 若l1不为空, 指针后移
    if (l1 != null){
       l1 = l1.next;
    }
    //12. 若l2不为空,指针后移
    if (l2 != null){
       l2 = l2.next;
    }
  }
  return dummyHead.next;
  
}
💡 核心逻辑拆解
  1. 哑节点(dummyHead)
  • 作用:避免单独处理结果链表的头节点,让代码更简洁。
  • 最终返回 dummyHead.next,就是真正的结果链表。
  1. 进位处理(temp)
  • 初始为 0,每次计算时累加当前两个节点的值和进位。
  • temp % 10:得到当前位的数字(如 13 % 10 = 3)。
  • temp /= 10:得到新的进位(如 13 / 10 = 1)。
  1. 遍历终止条件
  • l1 != null || l2 != null || temp != 0:
  • 只要还有节点没遍历完,或者还有进位(比如最后一位相加后仍有进位),就需要继续生成节点。
ListNode
java 复制代码
public class ListNode {
    // 节点存储的数据(比如数字、字符串等)
    int val;
    // 指向下一个节点的引用(相当于车厢的挂钩)
    ListNode next;

    // 构造方法:创建一个带数据的节点
    public ListNode(int val) {
        this.val = val;
        this.next = null; // 默认下一个节点为空
    }
}
  • val:这个节点要存的具体数据(比如数字、字符串等)。
  • next:一个「指向另一个 ListNode 对象」的引用,用来把节点串成链表。
    • 如果 next = null,就代表这是链表的最后一个节点,后面没东西了。

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

...。。。。。。。。。。。...

...。。。。。。。。。。。...

相关推荐
東隅已逝,桑榆非晚1 分钟前
新手入门指南:认识 C 语言文件操作(下)
c语言·笔记
飞翔中文网7 分钟前
Java学习笔记之泛型
java·笔记·学习
x_xbx8 分钟前
LeetCode:17. 电话号码的字母组合
算法·leetcode·职场和发展
拂拉氏14 分钟前
【知识讲解-题目讲解】算法系列之动态规划入门(上)
算法·leetcode·动态规划
AOwhisky20 分钟前
Ceph系列第四期:Ceph块存储(RBD)精讲
linux·运维·笔记·ceph·云计算·rbd
菜菜的顾清寒21 分钟前
力扣HOT100(46)将有序数组转换为二叉搜索树
算法·leetcode·职场和发展
longxiangam9 小时前
esp-idf 中 mipi dsi 使用的笔记
笔记
叶小鸡10 小时前
小鸡玩算法-力扣HOT100-多维动态规划
算法·leetcode·动态规划
EntyIU10 小时前
JVM内存与GC笔记
java·jvm·笔记
菜菜的顾清寒10 小时前
力扣HOT100(42)链表-随机链表的复制
算法·leetcode·链表