【发布时间】:2018-12-15 11:31:30
【问题描述】:
我有两个链表,每个链表代表一个数字。 例如列表 1 代表数字 29,第二个代表数字 7。 我想为这两个链表实现运算符 less equal ,其工作方式如下: 如果第一个链表表示的数字小于第二个,则返回 true。如果不返回false。 最重要的是只检查一次每个链表。所以使用链表中定义的 size & get 方法是没有用的。
当链表表示的两个数字的长度大小不同时,我面临的问题。 例如 10? 1 应该返回 false。 为 1? 10 它应该返回 true 并且还返回 10 ? 10. 每个数字由一个链表表示。
我想通过迭代器遍历一个或两个链表,以了解第一个链表表示的数字是否小于另一个。
我写了一个代码,它只在数字表示相同长度时才有效,例如 29? 45还是7? 6等
Iterator<T> iter1 = a1.Iterator();
Iterator<T> iter2 = a2.Iterator();
while (iter1.hasNext()) {
if (!(iter1.next().lessEqual(iter2.next()))) //if iter2 !hasNext this will throw exception; for ex 1?10
return false;
}
return true;
如何针对链表表示的不同大小的数字进行修复?请注意,整数中的每个数字都在链接中分配。例如 294。数字 2 在当前链表的第一个链接中,9 在第二个链接中,4 在当前链表的第三个链接中。
【问题讨论】:
-
你首先需要决定当两个列表大小不同时你的代码应该做什么。我们不能为你决定。它应该抛出异常吗?只迭代直到找到最短列表的末尾?总是返回false?总是返回 true?如果第一个列表较短,则返回 true?我们怎么知道?
-
@JohnD 只有一次,但如果一个比另一个短怎么办?
-
@Dici 如果第一个比另一个短,那么它应该返回 true,因为较短的数字总是小于较长的数字。
-
那就这样做吧。在进入循环之前,检查一个是否比另一个短并立即返回。然后才开始你的循环。
-
@JBNizet 我已经用更多细节更新了原始帖子。但是对于问题 - 我总是对第一个链表做一个小于运算符。如果第一个比其他短,它应该返回 true。如果第一个比其他长,它应该返回 false。
标签: java linked-list iterator