如果没有重复项,则添加到链表的前端方法,否则删除重复项

时间:2017-02-26 03:59:05

标签: java linked-list add singly-linked-list

我在计算链表的添加方法时遇到了很多困难。我的任务是:

  

在MoveToFront中实现此方法public void add(E item)   类。该方法的行为如下:当输入不存在时   链表,在前面添加;否则删除现有的   列表中的一个并将其重新插入前面。

到目前为止,我所做的是创建一个containsdelete方法,该方法将搜索列表中的现有项目,然后将其删除。然后它会将项目添加到列表的前面。

public int getLength() {
    Node<E> curNode = first;
    int count = 0;
    while (curNode != null) {
        curNode = curNode.next;
        count++;
    }
    return count;
}

public boolean Contains(E item) {
    if (first == null) {
        return false;
    }
    Node<E> currentNode = first;
    while (currentNode.next != null) {
        containCount++;
        if (currentNode.item.equals(item)) {
            return true;
        }
        currentNode = currentNode.next;
    }
    return false;
}

public E Delete(int kth) {
    if (kth <= getLength()) {
        Node<E> currentNode = first;
        for (int i = 1; i < kth; i++) {
            currentNode = currentNode.next;
        }
        currentNode.next = currentNode.next.next;
        return currentNode.item;
    } else {
        return null;
    }
}

public void add(E item) {

    if (!Contains(item)) {
        Node<E> myNode = new Node<E>(item, null);
        first = myNode;
    } else {
        Delete(containCount);
        Node<E> myNode = new Node<E>(item, null);
        first = myNode;
    }
}

3 个答案:

答案 0 :(得分:0)

我认为你没有正确地连接节点。在设置要插入first节点的节点之前,请将节点的next设置为旧first,如下所示:

myNode.next = first;
first = myNode;

答案 1 :(得分:0)

有几件事:

  1. 不是通过列表两次首先检查它是否包含该项目,然后要查找并删除它,您可以重写delete()以查看列表并删除是否找到匹配的项目。然后,您可以在add()方法的开头调用此方法。

  2. 您应该使用一个简单的实例变量来跟踪列表的大小,该变量在添加或删除项目时会更新,然后让getLength()返回此值。每次浏览整个列表都太昂贵了。

答案 2 :(得分:0)

首先,我在代码中看到了一个getLength()方法。这是一个链表,如果你试图得到这个问题的长度,那么你没有得到数据结构。

现在,如果我们开始实现,我会从需求中看到你必须以这种或那种方式向前面添加新元素。我就是这样做的 -

  1. 创建一个节点并将其链接到当前列表的第一个元素旁边。这将是添加方法。你最终也可以做这个方法,它不会有太大的区别。
  2. 然后开始搜索列表中的元素,如果找到匹配项,请将其删除。确保您不与前面添加的元素匹配。