java中的LinkedList

时间:2012-11-15 05:06:07

标签: java linked-list

我正在为一个赋值编写一个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;
}

在大多数情况下,我认为这没关系,但每当我尝试跟踪插入方法时,我最终会混淆自己并弄乱所有引用更改。有人能告诉我,我做得对吗?任何其他改进也将受到赞赏。

2 个答案:

答案 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
}