I, Título Descrição
Você é dado duas listas não vazias ligados representando dois inteiros não negativos. Os dígitos são armazenados em ordem inversa
e cada um dos seus nós contêm um único dígito. Adicione os dois números e devolvê-lo como um list.You ligada pode assumir os dois números não contêm nenhuma zero à esquerda, exceto o número 0 em si.
Dadas duas lista não-vazia para representar o inteiro dois não-negativo. O número de bits armazenados em ordem inversa, eles cada nó armazena apenas um único dígito. Os dois números juntos e retorna uma nova lista. Você pode assumir que, para além dos números 0, estas duas figuras não vai começar com um zero.
Exemplo:
Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4)
de saída: 7 -> 0 -> 8
Explicação: 342 + 465 = 807.
Em segundo lugar, as ideias de resolução de problemas
Em resumo, há um método violenta, o valor armazenado de cada lista encadeada em uma cadeia, em seguida, invertido, e finalmente expresso como um valor numérico. O resultado obtido adicionando a cadeia de caracteres torna-se invertido, e então convertido em uma lista ligada. Eu acho um pouco demais, não tão bom como adição direta da posição correspondente. Ele vai aparecer várias situações: 1, não há carry e carry. 2, o comprimento do mesmo comprimento de cadeia e cadeia inconsistente. Enquanto o negócio com o maior número de casos complexos em um carry e o comprimento de inconsistências pode resolver todo o problema.
No caso do transporte pode ser usado duas variáveis, uma loja dividido por 10, uma loja é dividida por 10. O novo valor de posição da lista nó i, a posição dos valores correspondentes nó de I A e B lista ea lista A e listas lista B correspondentes à posição i-1 eo valor do nó eo provedor. Isso a.value + b.value + nextNum.
Para comprimento da cadeia inconsistências, os dois receberam um impacto combinado lista ordenada, o excesso parte da fusão para o loop de volta, encontrado dentro da instrução IF também deve considerar o caso de transporte para uma longa lista de cada nó, um pouco de dificuldade, como um ainda iria colocar juntos. Quando o último ciclo, a lista curta é nós vazios, os nós com uma longa lista de valores, então ele vai curta lista de nós para ser resumido valor para zero. Finalmente, um caso especial é o mesmo comprimento A, B da lista, mas há um carry, o fora do circuito, está determinado a não valor carry 1, se ele está na lista, em seguida, um novo nó é o nó cauda, e estabelecer uma relação de conexão.
, Implementação de código terceiro
public class LetCode002 {
static class ListNode{
int val;
ListNode next;
public ListNode() {};
public ListNode(int val) {
this.val = val;
}
}
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = new ListNode();
ListNode head = result;
int nextNum = 0 , value;
while(l1 != null || l2 != null) {
int val1 = l1 != null?l1.val:0;//如果未空就为0
int val2 = l2 != null?l2.val:0;//如果为空就为0
//结果串的值
value = (val1+val2+nextNum) % 10;
nextNum = (val1+val2+nextNum) / 10;//是否有进位
result.next = new ListNode(value);
if(l1 != null) {
l1 = l1.next;
}
if(l2 != null) {
l2 = l2.next;
}
result = result.next;
}
if (nextNum > 0) {
result.next = new ListNode(nextNum);
}
return head.next;
}
private static void print(ListNode result) {
if(result == null) {
throw new RuntimeException("invaild input! result is null");
}
while(result != null) {
if(result.next != null ) {
System.out.print(result.val + ">");
}else if(result.val >= 0) {
System.out.print(result.val );
}
result = result.next;
}
}
public static void main(String[] args) {
test1();
System.out.println();
test2();
System.out.println();
test3();
}
private static void test3() {
ListNode l1 = new ListNode(1);
ListNode l21 = new ListNode(9);
ListNode l22 = new ListNode(9);
l21.next = l22;
ListNode result = addTwoNumbers(l1 , l21);
print(result);
}
public static void test1() {
ListNode l1 = new ListNode(2);
ListNode l2 = new ListNode(4);
ListNode l3 = new ListNode(3);
l1.next = l2;
l2.next = l3;
ListNode l21 = new ListNode(5);
ListNode n2 = new ListNode(6);
ListNode n3 = new ListNode(4);
l21.next = n2;
n2.next = n3;
ListNode result = addTwoNumbers(l1 , l21);
print(result);
}
public static void test2() {
ListNode l1 = new ListNode(0);
ListNode l21 = new ListNode(1);
ListNode n2 = new ListNode(8);
l21.next = n2;
ListNode result = addTwoNumbers(l1 , l21);
print(result);
}
}
---------------------
Autor: Rusian_Stand
Fonte: CSDN
Original:
Direitos de autor: Este artigo é um artigo original blogger, reproduzido, por favor anexar ligação Bowen!