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,就代表这是链表的最后一个节点,后面没东西了。

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

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

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

相关推荐
笑鸿的学习笔记2 小时前
git笔记之--abort和--quit参数详解
笔记·git
Z.风止2 小时前
Large Model-learning(1)
开发语言·笔记·git·python·学习
会编程的土豆2 小时前
【leetcode hot 100】二叉树
算法·leetcode
لا معنى له3 小时前
综述翻译:Embodied Science: Closing the Discovery Loop withAgentic Embodied AI
人工智能·笔记·学习
Mr_Xuhhh3 小时前
LeetCode 热题 100 刷题笔记:数组与排列的经典解法(续)
算法·leetcode·职场和发展
chushiyunen3 小时前
检索模型bi-encoder笔记
笔记
zhendeWD3 小时前
learn-claude-code笔记
人工智能·笔记
Hello_Embed3 小时前
嵌入式上位机开发入门(二):常用 API
笔记·stm32·嵌入式·信息与通信
九成宫3 小时前
IT项目管理期末复习——Chapter 3 项目管理过程组:案例研究
笔记·项目管理·软件工程