我正在寻找有关 Java 作业的一些建议。我被要求做的是对存储在链表中的数字执行不同的操作,每个数字都在一个单独的节点中。重点是编写一个可以对非常大的数字进行算术运算的程序。
我正在寻求帮助的特定问题是编写一个比较两个数字的方法,类似于整数的常规 compareTo() 方法。如果 this.num < num 则返回 -1,如果 this.num > num 则返回 +1,如果相等则返回 0。
让我感到困难的是,赋值指定链表应该以相反的顺序存储数字。例如,数字 145 的链表如下所示:
5 => 4 => 1 => 空
这使得将数字相加更容易,但在尝试比较时让我很头疼。这是我想出的,评论解释了它应该如何工作。
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;
}
倒序的数字是让我走向递归的原因。我以为我会递归地遍历列表,然后在输出时比较每个数字,并以某种方式在不相同的第一个数字处打破递归。我意识到这不是使用递归的常用方法,但我不知道该怎么做。有没有一种方法可以在不抛出异常的情况下中断?我觉得这可能有点太草率了。或者关于如何在没有递归的情况下做到这一点的任何建议?
请不要只给我一些代码来复制和粘贴。我只是想指出正确的方向。谢谢!