我正在为一个赋值编写一个LinkedList类,我正在编写我的insert方法,并且想知道我是否能看到它。
private Node first; // start of the list
private class Node {
private Item item;
private Node next;
}
public boolean insert(Item item) {
// add item to list if it doesn't already exist
// return true if a new Node is created, otherwise false
if ( first.next == null && first.item == item) {
return false;
}
Node ptr = first;
while (ptr.next != null) {
if (ptr.item == item) {
return false;
}
ptr = ptr.next;
}
Node oldFirst = first;
first = new Node();
first.item = item;
first.next = oldFirst;
return true;
}
在大多数情况下,我认为这没关系,但每当我尝试跟踪插入方法时,我最终会混淆自己并弄乱所有引用更改。有人能告诉我,我做得对吗?任何其他改进也将受到赞赏。
答案 0 :(得分:0)
我会考虑编写一个额外的函数来检查Item是否已经在列表中。这将使插入功能更加清晰,整个参考更改只会在那里。也是你的第一次测试:
if ( first.next == null && first.item == item) {
return false;
}
除了while循环的第一次迭代之外什么都不做。
你应该首先初始化,这样你就不会像@threenplusone那样抛出NullPointerExcpetion,或者检查是否:first == null
。 (如果first为null,则while循环中的第一个ptr.next将抛出NPE)
另外你应该像@Thilo所说的那样用等号比较你的物品。
我认为其余的是正确的。
答案 1 :(得分:-1)
你的insert方法不是OO - 你正在使用while
循环来遍历列表,所以这个方法可以是static
方法(如果你也传入了第一个节点)。 / p>
更优雅的方式是:
在伪代码中:
insert(item) {
if (next == null)
add item to "this" // we are at end of list
else
next.insert(item) // hand item to the next node
}