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

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

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

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

相关推荐
To_OC6 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
疯狂打码的少年9 小时前
【软件工程】软件开发模型:增量模型与迭代模型
笔记·软件工程
Generalzy9 小时前
从本地 Demo 到生产级检索:Milvus 学习笔记(3)
笔记·学习·milvus
凉、介12 小时前
Virtio 系列(一):框架概览
笔记·学习·嵌入式·虚拟化·virtio
Yang_jie_0312 小时前
笔记:数据结构(栈是否使用底指针以及头指针的初始化值)
数据结构·笔记·算法
一杯奶茶¥13 小时前
c语言程序设计大学期末考试考研知识点重点笔记题库复习资料C语言重点考点题库资料合集
c语言·笔记·考研·c语言程序设计·c语言笔记
海石14 小时前
【JS击败90%】前缀和+定长滑动窗口
算法·leetcode
依然范特东14 小时前
动手学深度学习笔记--数据操作、线性代数
人工智能·笔记·深度学习
Tisfy14 小时前
LeetCode 2685.统计完全连通分量的数量:DFS求每个连通块的边点数
算法·leetcode·深度优先··题解·连通图·全连通分量
海石14 小时前
1次遍历,空间复杂度击败100%,时间复杂度击败85%
算法·leetcode