我在计算链表的添加方法时遇到了很多困难。我的任务是:
在MoveToFront中实现此方法public void add(E item) 类。该方法的行为如下:当输入不存在时 链表,在前面添加;否则删除现有的 列表中的一个并将其重新插入前面。
到目前为止,我所做的是创建一个contains
和delete
方法,该方法将搜索列表中的现有项目,然后将其删除。然后它会将项目添加到列表的前面。
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;
}
}
答案 0 :(得分:0)
我认为你没有正确地连接节点。在设置要插入first
节点的节点之前,请将节点的next
设置为旧first
,如下所示:
myNode.next = first;
first = myNode;
答案 1 :(得分:0)
有几件事:
不是通过列表两次首先检查它是否包含该项目,然后要查找并删除它,您可以重写delete()以查看列表并删除是否找到匹配的项目。然后,您可以在add()方法的开头调用此方法。
您应该使用一个简单的实例变量来跟踪列表的大小,该变量在添加或删除项目时会更新,然后让getLength()返回此值。每次浏览整个列表都太昂贵了。
答案 2 :(得分:0)
首先,我在代码中看到了一个getLength()方法。这是一个链表,如果你试图得到这个问题的长度,那么你没有得到数据结构。
现在,如果我们开始实现,我会从需求中看到你必须以这种或那种方式向前面添加新元素。我就是这样做的 -