Ich bin auf dieses Problem fest:Hinzufügen Anzahl Vertreten durch verlinkte Liste
Sie haben zwei Zahlen, die durch eine verknüpfte Liste dargestellt, wobei jeder Knoten eine einzelne Ziffer enthält. Die Ziffern werden in umgekehrter Reihenfolge gespeichert, so dass die Ziffer 1 am Anfang der Liste steht. Schreiben Sie eine Funktion, die die beiden Zahlen addiert und die Summe als verkettete Liste zurückgibt. BEISPIEL Input: (3 -> 1 -> 5), (5 -> 9 -> 2) Ausgang: 8 -> 0 -> 8
Das Problem ist, dass mein Ergebnis ist 8 8 während das Ergebnis sollte 8 0 8 sein. Ich habe die Summe ausgedruckt und es ist 8 10 8 so sollte es funktionieren. Irgendwelche Ideen?
Hier ist mein Code:
public Node addNumbers(Node number1, Node number2) {
if(number1 == null && number2 == null)
return null;
Node sumOf = null;
int sum = 0;
int carry = 0;
while(number1 != null && number2 != null) {
sum = number1.data + number2.data + carry;
System.out.println(sum);
// update carry for next operation
if(sum > 9)
carry = 1;
else
carry = 0;
if(sum > 9) {
if(sumOf == null) {
sumOf = new Node(sum % 10);
} else {
sumOf.next = new Node(sum % 10);
}
} else {
if(sumOf == null) {
sumOf = new Node(sum);
} else {
sumOf.next = new Node(sum);
}
}
number1 = number1.next;
number2 = number2.next;
}
return sumOf;
}
public void toString(Node node) {
System.out.println();
while (node != null) {
System.out.print(node.data + " ");
node = node.next;
}
}
public static void main(String[] args) {
AddTwoNumbers add = new AddTwoNumbers();
number1 = new Node(3);
number1.next = new Node(1);
number1.next.next = new Node(5);
number2 = new Node(5);
number2.next = new Node(9);
number2.next.next = new Node(2);
System.out.println("numbers: ");
add.toString(number1);
add.toString(number2);
System.out.println();
System.out.println("after adding: ");
add.toString(add.addNumbers(number1, number2));
}
}
Wenn ich diese Übung tat, würde ich wahrscheinlich eine Methode schreiben, jede Liste in eine Zahl zu konvertieren, führen die Addition und dann das Ergebnis wieder zu einer verknüpften Liste konvertieren . –
Warum konvertieren Sie die Eingaben nicht in 'BigInteger', fügen sie hinzu und konvertieren das Ergebnis zurück in eine LinkedList? Die Konvertierung sollte mit Java8 einfach sein. – slartidan
Ich dachte zuerst darüber nach, aber ich denke, das Problem will, dass ich LinkedList strikt benutze, da es in der LinkedList Ch von Cracking the Coding Interview ist. Danke für die Vorschläge. –