LeetCode-2 Suma dos números

Inserte la descripción de la imagen aquí
La idea de esta pregunta es utilizar el programa de simulación (creo que esto es una forma de pensar, cuando nos encontramos con este tipo de problema que está sesgada hacia los problemas matemáticos simples, podemos transformar nuestro pensamiento en el lenguaje de programación). Lo aprendimos cuando estábamos en la escuela primaria. Reglas de adición, es decir, llevar más uno

  • La idea preliminar debería ser recorrer las dos listas vinculadas al mismo tiempo (los dos punteros de la lista vinculada se mueven una vez cada vez que se realiza el recorrido // moverse bajo la premisa de que el nodo no está vacío, y la condición de recorrido es que en al menos una de las listas vinculadas no está vacía), y las dos listas vinculadas están en la misma El valor del número de dígitos se agrega y se agrega el acarreo (el acarreo predeterminado inicial es 0), si la suma es mayor que 10 , se generará un acarreo (aquí, acarreo se marca como 1, y el acarreo de un cierto bucle se usa en el cálculo del siguiente bucle). Independientemente de si se genera un acarreo o no, usaremos suma% 10 como el contenido almacenado

  • Para el almacenamiento de datos en cada ciclo, hay un nodo principal, que apunta a temp, y el número agregado cada vez se coloca en temp, y un nodo se mueve a la vez en cada ciclo.

  • Especial: cuando las dos listas vinculadas están vacías, pero todavía hay un acarreo:
    por lo que debe establecer una declaración if por separado, si el acarreo tiene un valor, agregue otro nodo después de la lista temporal vinculada

  • Eventualmente obtendremos una lista de encabezados, que es lo que queremos

 public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    
    
        ListNode head=null;
        ListNode temp=new ListNode();

        int num1;
        int num2;
        int sum;
        int carry=0;

        while(l1!=null||l2!=null){
    
    
            num1=l1!=null?l1.val:0;
            num2=l2!=null?l2.val:0;
            sum=num1+num2+carry;

            carry=sum/10;

            if(l1!=null){
    
    
                l1=l1.next;
            }
            if(l2!=null){
    
    
                l2=l2.next;
            }
            if(head==null){
    
    
                temp.val=sum%10;
                head=temp;
            }else{
    
    
                temp.next=new ListNode(sum%10);
                temp=temp.next;
            }


        }
        if(carry>0){
    
    
            temp.next=new ListNode(carry);
        }
        return head;




    }

Supongo que te gusta

Origin blog.csdn.net/WA_MC/article/details/114993166
Recomendado
Clasificación