Se le dan dos listas enlazadas no vacías que representan dos enteros no negativos. Cada uno de sus dígitos se almacena en orden inverso , y cada nodo solo puede almacenar un dígito.
Agregue dos números y devuelva una lista vinculada que represente la suma en el mismo formulario.
Puedes suponer que ningún número comienza con un cero que no sea el número cero.
Ejemplo 1:
Entrada: l1 = [2,4,3], l2 = [5,6,4] Salida: [7,0,8] Explicación: 342 + 465 = 807.
Ejemplo 2:
Entrada: l1 = [0], l2 = [0] Salida: [0]
Ejemplo 3:
Entrada: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] Salida: [8,9,9,9,0,0,0,1]
pista:
- El número de nodos en cada lista enlazada está en el
[1, 100]
rango 0 <= Node.val <= 9
- Los datos del título garantizan que el número representado por la lista no contiene ceros a la izquierda.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *p1 = nullptr;
ListNode *p2 = nullptr;
int jinwei = 0;
int sum = 0;
while(l1||l2){
int n1 = l1?l1->val:0;
int n2 = l2?l2->val:0;
sum = n1 + n2 + jinwei;
if(!p1){
p1 = p2 = new ListNode( sum % 10);
}else{
p2->next = new ListNode(sum % 10);
p2 = p2->next;
}
jinwei = sum /10;
if(l1)
l1 = l1->next;
if(l2)
l2 = l2->next;
}
if (jinwei > 0) {
p2->next = new ListNode(jinwei);
}
return p1;
}
};