题目列表
学习题(22题)
2024.03.31
两数相加
19. 删除链表的倒数第 N 个结点
合并K个升序链表
2024.04.01
24. 两两交换链表中的节点
25. K 个一组翻转链表
61. 旋转链表
83. 删除排序链表中的重复元素
82. 删除排序链表中的重复元素 II
86. 分隔链表
92. 反转链表 II
116. 填充每个节点的下一个右侧节点指针
141. 环形链表
142. 环形链表 II
2024.04.02
143. 重排链表
147. 对链表进行插入排序
148. 排序链表
203. 移除链表元素
206. 反转链表
234. 回文链表
328. 奇偶链表
445. 两数相加 II
2074. 反转偶数长度组的节点
考试题(20题)
2024.04.03
2024.03.31
两数相加
题目
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例 1:
输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0]
输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
输出:[8,9,9,9,0,0,0,1]
提示:
- 每个链表中的节点数在范围 [1, 100] 内
- 0 <= Node.val <= 9
- 题目数据保证列表表示的数字不含前导零
思路
两个数和一个进位相加,所以所有都不能为空或者0
答案
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode head = new ListNode();ListNode c = head;int carry = 0;while (l1 != null || l2 != null || carry != 0) {int lv1 = 0;int lv2 = 0;if (l1 != null) {lv1 = l1.val;l1 = l1.next;}if (l2 != null) {lv2 = l2.val;l2 = l2.next;}int sum = lv1 + lv2 + carry;c.next =