Botón de fuerza-2. Suma dos números

2. Suma dos números

Descripción del Título:

Se dan dos listas enlazadas no vacías para representar dos enteros no negativos. Entre ellos, sus respectivos dígitos se almacenan en orden inverso, y cada nodo solo puede almacenar un dígito.

Si sumamos estos dos números, se devolverá una nueva lista vinculada para representar su suma.

Puede asumir que ninguno de estos números comienza con 0 excepto el número 0.

Ejemplo:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

Solución:
Debido a que la lista vinculada comienza desde el primer nodo y va desde la posición a la posición alta. Por lo tanto, solo necesita recorrer desde el principio hasta el final y agregarlos. Si hay un acarreo, agréguelo al siguiente par de nodos.

class Solution {
    
    
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    
    
        //结果链表的链表头
        ListNode result = new ListNode(0);
        //指向上述链表当前节点
        ListNode cur = result;
        //进位
        int carry = 0;
        while (l1!=null || l2!=null){
    
    
            int x = l1==null ? 0 : l1.val;
            int y = l2==null ? 0 : l2.val;
            //求和,对应位的数字加前一位的进位
            int sum = x + y + carry;

            carry = sum/10;
            sum = sum%10;
            cur.next = new ListNode(sum);

            //后移
            cur = cur.next;
            if (l1 != null){
    
    
                l1 = l1.next;
            }
            if (l2 != null){
    
    
                l2 = l2.next;
            }
        }
        //最后一步加完后如果有进位
        if (carry == 1) {
    
    
            cur.next = new ListNode(carry);
        }
        if (result.next != null){
    
    
            //让result后移,避免出现[0 7 0 8]这种情况
            result = result.next;
        }
        return  result;
    }
}

Supongo que te gusta

Origin blog.csdn.net/weixin_44829930/article/details/109818155
Recomendado
Clasificación