Я пытаюсь попрактиковаться в примере с leetcode. Вход - [2,4,3] [5,6,4]
Ожидаемый результат = = [7,0,8]; (2 + 5, 4 + 6, 3 + 4 + 1 (перенос 1 из узла 2)); Я получаю [7,8];
q.next и p.next - пропускает добавление 2-го узла и делает добавление только для 1-го и 3-го узла. Я не могу понять, почему пропущен второй узел.
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode extra = new ListNode(0);
ListNode p = l1 , q = l2, curr = extra;
int carry = 0;
while(p != null || q != null)
{
int x = (p != null) ? p.val :0 ;
int y = (q != null) ? q.val :0 ;
int sum = carry + x + y ;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
p=p.next;
q=q.next;
if(p != null)p = p.next;
if(q != null)q = q.next;
}
if(carry > 0)
{
curr.next = new ListNode(carry);
}
return curr;
}
}
РЕДАКТИРУЕТСЯ В ОТВЕТАХ - я проверил приведенный ниже код в leetcode. Он по-прежнему говорит, что результат равен [0,8] вместо [7,0,8]
, вот ссылка на проблему: https://leetcode.com/problems/add-two-numbers/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode extra = new ListNode(0);
ListNode p = l1 , q = l2, curr = extra;
int carry = 0;
while(p != null || q != null)
{
int x = (p != null) ? p.val :0 ;
int y = (q != null) ? q.val :0 ;
int sum = carry + x + y ;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
if(p != null)p = p.next;
if(q != null)q = q.next;
}
if(carry > 0)
{
curr.next = new ListNode(carry);
}
return curr;
}
}