[Práctica diaria] - cadena de suma dos números

título Descripción

Se nos ha dado dos lista no vacía se utiliza para representar dos no negativo entero. Donde sus respectivos bits se almacenan en el orden inverso de la manera, y que cada nodo puede almacenar un solo dígito. Si sumamos estos dos números, devolverá una nueva lista y para representarlos. Se puede suponer que, además de los números 0, estos dos números no comenzarán con 0.
El título proviene del leetcode, haga clic en la
lista de la siguiente manera:

public static class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }

Leer título

Ejemplo:
Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4)
de salida: 7 -> 0 -> 8
Causa: 342 + 465 = 807

La resolución de problemas

Como puede verse en el ejemplo, podemos ver esto como una cuestión de matemáticas para calcular. Aquí hay que señalar que hay tres puntos:

  • 1, la longitud de las dos listas puede ser inconsistente
  • 2, puede lista está vacía
  • 3, se puede producir de transporte adicional. 99 + 1 = 100, por ejemplo,

código

public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		// 用于保存相加得到的结果 也用于最终返回 初始化为0
        ListNode retunList = new ListNode(0);
        ListNode p = l1, q = l2, curList = retunList;
        // carry 表示相加超过10后的进位数值
        int carry = 0;
        // 只要有一个链表还有值,那么就要将计算进行下去
        while (p != null || q != null) {
        	// 当链表存在空或者两个链表长度不一致时可能会出现空链表的情况,此时我们用0来与另一个链表相加
            int x = p == null ? 0 : p.val;
            int y = q == null ? 0 : q.val;
            // 计算结果应为链表对应节点的值加上进位的值
            int z = x + y + carry;
            // 重新对进位的值进行赋值
            carry = z / 10;
            // 该节点的值为相加后个位的值 如9 + 5 = 14 那么该位上的值应当为4,1需要进位
            curList.next = new ListNode(z % 10);
            // 对下一个节点进行计算
            curList = curList.next;
            if (p != null) p = p.next;
            if (q != null) q = q.next;
        }
        // 如果最终循环完成后还存在进位的值,应该向上进1位
        if (carry > 0) {
            curList.next = new ListNode(carry);
        }
        // 初始节点为0  所以返回的应该是它的next
        return retunList.next;
    }
Publicado 26 artículos originales · ganado elogios 6 · vistas 2935

Supongo que te gusta

Origin blog.csdn.net/weixin_45676630/article/details/105180776
Recomendado
Clasificación