2023-07-02 Pregunta diaria de LeetCode (suma de dos números)

2023-07-02 una pregunta por día

1. Número de tema

2. 两数相加

2. Enlace temático

Haga clic para saltar a la ubicación del tema

3. Descripción del tema

Se le dan dos listas enlazadas no vacías que representan dos enteros no negativos. Cada uno de ellos se almacena en orden inverso , y cada nodo solo puede almacenar un número.

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.

pista:

  • El número de nodos en cada lista enlazada está en el rango [1, 100]
  • 0 <= Nodo.val <= 9
  • Los datos del título garantizan que el número representado por la lista no contiene ceros a la izquierda.

4. Código de resolución de problemas

/**
 * 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) {
    
    
        int carry = 0;
        ListNode * head1 = l1;
        while(l1->next != nullptr && l2->next != nullptr){
    
    
            int temp = (l1->val+l2->val+carry);
            l1->val = temp%10; 
            carry = temp/10;
            l1 = l1->next;
            l2 = l2->next;
        }
        
        if(l1->next == nullptr){
    
    
            int temp = (l1->val+l2->val+carry);
            l1->val = temp%10; 
            carry = temp/10;
            if(l2->next == nullptr){
    
    
                if(carry == 1){
    
    
                    l1->next = new ListNode(1);
                    l1->next->next = nullptr;  
                }
            }
            else{
    
    
                l1->next = l2->next;
                l1 = l1->next;
                while(l1 ->next != nullptr){
    
    
                    int temp = l1->val+carry;
                    l1->val = temp%10;
                    carry = temp/10;
                    l1 = l1->next;
                }
                if(l1->val == 9 && carry ==1){
    
    
                    l1->val = 0;
                    l1->next = new ListNode(1);
                    l1->next->next = nullptr;
                }
                else{
    
    
                    l1->val += carry;
                }
            } 
        }
        else{
    
    
            int temp = (l1->val+l2->val+carry);
            l1->val = temp%10; 
            carry = temp/10;
            l1 = l1->next;
            while(l1 ->next != nullptr){
    
    
                int temp = l1->val+carry;
                l1->val = temp%10;
                carry = temp/10;
                l1 = l1->next;
            }
            if(l1->val == 9 && carry ==1){
    
    
                l1->val = 0;
                l1->next = new ListNode(1);
                l1->next->next = nullptr;
            }
            else{
    
    
                l1->val += carry; 
            }
        }
    return head1;
    }
};

Cinco, ideas para resolver problemas

(1) Para sumar dos números en una lista enlazada, primero debemos saber cómo sumar dos números en una matriz. El método que usamos es naturalmente un método de simulación, y la simulación se realiza en un cálculo vertical de menor a mayor. Usamos el método de sumar posición por posición, y usamos carry para contar si se lleva, y los números que no se pueden atravesar en los números se pueden complementar al revés.

(2) Para que sea equivalente a una matriz en una lista enlazada, es natural que necesite conocer el método transversal de la lista enlazada. Si está familiarizado con el método transversal de la lista enlazada, entonces este problema se puede resolver fácilmente.

Supongo que te gusta

Origin blog.csdn.net/qq_56086076/article/details/131497646
Recomendado
Clasificación