13--2. 两数相加
1.L1-两数之和2.L2-二分查找3.L-3: 35.搜索插入位置4.6 -- 27. 移除元素5.L5-367. 有效的完全平方数6.L4: 69.x的平方根7.L-4: 34--在排序数组中查找元素的第一个和最后一个位置8.H-29.H-三数之和10.链表指向问题(pre = cur.next与cur.next = pre)11.Java链表12.力扣T26与T27的区别13.7--26. 删除有序数组中的重复项14.8--283. 移动零15.12--76. 最小覆盖子串16.11--209. 长度最小的子数组17.10--977. 有序数组的平方18.9--844. 比较含退格的字符串19.19.删除链表的倒数第N个结点20.27,移除元素21.459.重复的字符串22.28.KMP算法--leetcode
23.13--2. 两数相加
【首先,题目是给了两个链表,我们可以直接使用哦】
- 我们要自己创建一个链表来存储结果
//将第一个节点的值初始化为0,用来指向头指针(意思就是pre后面的那个值才是头指针),返回结果 LinkNode pre = new LinkNode(0); // cur是一个可移动的指针,作为储存两个数之和的位置 LinkNode cur= pre;
- 定义一个记录进位值的标记,初始化为0
int carry = 0;
- 然后开始构建新的结果链表,使用while循环,确定循环跳出的条件:
l1 != null || l2 != null
-
-
补充:
l1.val的写法时错误的,当我们判断一个节点是否为空时,需要检查节点对象本身是否为 null,而不是仅仅依靠节点的值属性(val)是否为 null。因为一个节点的值属性可以是非空的,但节点对象本身仍然可以为空。
-
-
l1.val 获取L1当前节点的值; l2.val 获取L2当前节点的值;
- 通过相加计算sum的值
-
int sum = x + y + carry;
-
- 进入结果链表的赋值阶段
- 首先先计算进位数(更新进位数)
- 计算sum值,就是结果链表当前位置的值,
- 创建一个新的节点,值为当前位的值
// 更新进位值,将当前和除以 10,得到的商作为新的进位值 carry = sum / 10; // 更新当前位的值,将当前和对 10 取余,得到的余数作为当前位的值 sum = sum % 10; // 创建一个新的节点,值为当前位的值,连接到结果链表的末尾 cur.next = new ListNode(sum);
- 进入结果链表的赋值阶段
-
- 此节点赋值完毕,更新cur指针,更新L1指针,更新L2指针 (while循环体内容结束)
cur = cur.next; // 更新 cur 指针,指向新创建的节点,以便下一次迭代 if (l1 != null) l1 = l1.next; // 如果 l1 还有剩余节点,将 l1 指向下一个节点 if (l2 != null) l2 = l2.next; // 如果 l2 还有剩余节点,将 l2 指向下一个节点
- 在循环体外判断最后的进位是否为1,若为1,则最后一位补1
if (carry == 1) { // 最后的进位是否为 1,如果是,创建一个新的节点,值为进位值,连接到结果链表的末尾 cur.next = new ListNode(carry);
【补充知识:】
- new ListNode()中的括号里面的参数含义
2、
3、
4、
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~