Gewusst wie: vergleichen von ints gespeichert in verknüpften Listen Java

Ich bin auf der Suche nach einige Ratschläge auf eine Java-Zuordnung. Was ich fragte zu tun ist, führen Sie verschiedene Operationen auf zahlen, die gespeichert werden in einer verknüpften Liste, die mit jeder Ziffer in einem separaten Knoten. Der Punkt ist, ein Programm zu schreiben, das kann arithmetische Operationen auf zahlen, die sind sehr sehr groß.

Dem besonderen problem, dass ich bin auf der Suche nach Hilfe ist für das schreiben eine Methode, die vergleicht zwei zahlen, ähnlich den regulären compareTo () - Methode mit int-Werten. Es sollte -1 zurückgeben, wenn diese.num < num, +1 wenn dieser.num > num -, und 0, wenn Sie gleich sind.

Was macht das schwierig für mich ist die Tatsache, dass die Zuordnung gibt an, dass die verknüpften Listen speichern sollten die zahlen in umgekehrter Reihenfolge. Zum Beispiel die verknüpfte Liste für die Nummer 145 würde wie folgt Aussehen:

5 => 4 => 1 => null

Dies macht es einfacher, hinzufügen von zahlen zusammen, aber es macht es Kopfschmerzen für mich, wenn versucht wird, zu vergleichen. Hier ist, was ich mir ausgedacht habe, die Kommentare erklären, wie es funktionieren sollte.

public int compareTo(LLNum list)
{ //Compares two numbers.
  //If the two numbers are of a different length, clearly the shortest is the smallest.
  //If the two numbers are of equal length, call traverseToCompare to do the comparison.
  if (this.len > list.len)
  {
    compareResult = 1;
  }
  else if (this.len < list.len)
  {
    compareResult = -1;
  }
  else if (this.len == list.len)
  {
    traverseToCompare(this.head, list.head);
  }

  return compareResult;
}


public void traverseToCompare(ListNode node1, ListNode node2)
{ //In the case that both numbers are of the same length, recursively traverse the list.
  //compare each digit individually while unwinding the stack.
  //Once two digits are found to be different, break out of the unwinding (Note: I could not find a way of breaking out)
  //Since the dominant digit is at the tail end, this ensures the least number of   comparisons.
  if (node1 == null || node2 == null) 
  { //Base case. Handles the case where both numbers are identical.
    compareResult = 0;
    return;
  }
  traverseToCompare(node1.getNext(), node2.getNext());
  if (node1.getItem() > node2.getItem())
  {
    compareResult = 1;
  }
  if (node1.getItem() < node2.getItem())
  {
    compareResult = -1;
  }

  return; 
}

Die zahlen in umgekehrter Reihenfolge ist, was zog mich in Richtung der Rekursion. Ich dachte, ich würde rekursiv Durchlaufen der Liste und vergleichen Sie dann die einzelnen Ziffern auf dem Weg nach draußen, und irgendwie brechen Sie aus der Rekursion auf die ersten Ziffern sind nicht das gleiche. Ich weiß, dies ist nicht die gewöhnliche Weise, Rekursion zu verwenden, aber ich war mir nicht sicher wie sonst, es zu tun. Gibt es eine Möglichkeit, ich könnte brechen, ohne nur eine Ausnahme werfen? Ich denke, dass könnte ein wenig zu schlampig. Oder irgendwelche Vorschläge, wie dies zu tun, ohne Rekursion?

Bitte gib mir nicht nur einige code zu kopieren und einzufügen. Ich bin gerade auf der Suche zu sein, wies in die richtige Richtung. Danke!

InformationsquelleAutor eljstonge | 2013-02-18
Schreibe einen Kommentar