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

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

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

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

相关推荐
.Cnn6 小时前
JavaScript 前端基础笔记(网页交互核心)
前端·javascript·笔记·交互
九成宫7 小时前
IT项目管理期末复习——Chapter 10 项目沟通管理
笔记·项目管理·软件工程
23471021277 小时前
4.14 学习笔记
笔记·python·学习
sonnet-10298 小时前
函数式接口和方法引用
java·开发语言·笔记
skylijf8 小时前
2026 高项第 6 章 预测考点 + 练习题(共 12 题,做完稳拿分)
笔记·程序人生·其他·职场和发展·软件工程·团队开发·产品经理
今天你TLE了吗8 小时前
LLM到Agent&RAG——AI概念概述 第二章:提示词
人工智能·笔记·后端·学习
九成宫10 小时前
IT项目管理期末复习——Chapter 9 项目人力资源管理
笔记·项目管理·软件工程
2601_9498179210 小时前
大厂Java进阶面试解析笔记文档
java·笔记·面试
John.Lewis10 小时前
C++进阶(12)附加学习:STL之空间配置器(了解)
开发语言·c++·笔记
独小乐10 小时前
019.ADC转换和子中断|千篇笔记实现嵌入式全栈/裸机篇
linux·c语言·驱动开发·笔记·嵌入式硬件·mcu·arm