<?php

declare(strict_types=1);

namespace leetcode;

use leetcode\util\ListNode;

class AddTwoNumbers
{
    public static function addTwoNumbers(ListNode $p, ListNode $q): ?ListNode
    {
        $dummy = new ListNode(0);
        $current = $dummy;
        $carry = 0;

        while ($p || $q) {
            $sum = $p->val + $q->val + $carry;
            $carry = (int) floor($sum / 10);
            $current->next = new ListNode($sum % 10);
            $current = $current->next;

            if ($p) {
                $p = $p->next;
            }

            if ($q) {
                $q = $q->next;
            }
        }

        if ($carry !== 0) {
            $current->next = new ListNode($carry);
        }

        return $dummy->next;
    }
}