找不到两个链表的两种迭代类型之间的区别



你会得到两个非空的链表,代表两个非负数 整数。数字以相反的顺序存储,每个数字 节点包含一位数字。将两个数字相加并将其作为 链表。

您可以假设这两个数字不包含任何前导零,除了 数字 0 本身。

例:

输入: (2 -> 4 ->3( + (5 -> 6 -> 4( 输出: 7 -> 0 -> 8 说明: 342 + 465 = 807。

以下是我编写的代码:

ListNode dummy = new ListNode(0);
ListNode cur = dummy;
int add = 0;
while (r1 != null && r2 != null){
int sum = r1.val + r2.val + add;
add = sum / 10;
cur.next = new ListNode(sum % 10);
cur = cur.next;
r1 = r1.next;
r2 = r2.next;
}
if (r1 != null){
int sum = r1.val + add;
add = sum / 10;
cur.next = new ListNode(sum % 10);
cur = cur.next;
r1 = r1.next;
}
if (r2 != null){
int sum = r2.val + add;
add = sum / 10;
cur.next = new ListNode(sum % 10);
cur = cur.next;
r2 = r2.next;
}
if (add == 1){
cur.next = new ListNode(1);
}

您的算法(可以描述如下(是正确的:

  1. 添加两个列表的元素,而其中一个没有用完,
  2. 从第一个列表中添加任何剩余的"尾部"元素,
  3. 从第二个列表中添加任何剩余的"尾部"元素,
  4. 如果不是零,则添加"携带"/

在步骤 2 和 3 中,只有一个是非空的。

实现的问题在于实现 2 和 3 的方式:由于您使用的是if,因此最多添加一个元素,而不是处理整个"尾巴"。

if替换为while将解决此问题。

最新更新