在用户定义的Java双链接列表中添加和删除元素

在用户定义的Java双链接列表中添加和删除元素,java,linked-list,Java,Linked List,我正在准备下周的考试,我希望有人能在添加和删除双链接列表中的元素时帮助我。逻辑对我来说是有意义的,不幸的是我还不太擅长编码(这只是我的第二门计算机科学课程)。我在网上和我的文章中都看过了,但是我似乎找不到一个足够接近我的问题的例子。下面我将发布我的教授要求我完成的内容,以及我当前的代码。提前感谢您的帮助 更新 我在添加时也遇到了问题,但是有人能够帮助我,但是我的删除方法仍然存在问题。我觉得很奇怪,我的教授有一个remove方法,返回类型不是void。有人能解释一下吗?无论如何,我的更新代码如下

我正在准备下周的考试,我希望有人能在添加和删除双链接列表中的元素时帮助我。逻辑对我来说是有意义的,不幸的是我还不太擅长编码(这只是我的第二门计算机科学课程)。我在网上和我的文章中都看过了,但是我似乎找不到一个足够接近我的问题的例子。下面我将发布我的教授要求我完成的内容,以及我当前的代码。提前感谢您的帮助

更新

我在添加时也遇到了问题,但是有人能够帮助我,但是我的删除方法仍然存在问题。我觉得很奇怪,我的教授有一个remove方法,返回类型不是void。有人能解释一下吗?无论如何,我的更新代码如下

来自教授:

将CS401DBLinkedListImpl.java中缺少的代码填写为 在课堂讲演中指出

要测试代码,请创建一个双链接列表并输入 其中包含字符串类型的以下元素:

比尔、罗汉、詹姆斯、克里希纳、哈维尔、丽莎

(a) 打印从开头开始的链接列表

(b) 打印从末尾开始的链接列表

(c) 删除账单并从头开始打印链接列表

(d) 删除Lisa并从末尾开始打印链接列表

(e) 移除奎师那并打印链接列表,从 开始

下面这组代码是我的用户定义类,我将测试的方法是boolean add(ee)、E remove(int n)、void print_from_start()和void print_from_end()

仅供参考,CS401DBLinkedListImpl.java:67在我的remove方法中引用了以下代码行:

      current.previous.next = current.next;

在此方面的任何帮助都将不胜感激。我觉得我有点接近答案,只是需要澄清一下。谢谢。

您当前的代码无法处理删除索引0的问题

LinkEntry<E> current = head;
if (n == 0) {
    // something like this maybe...
    head = head.next;
    if (head != null) { head.previous = null; }
    return current;
}
所以应该是这样的:

if (n == i++) {
    // We're at the spot so let's remove it.
    current.previous.next = current.next;
    if (current.next != null) { current.next.previous = current.previous; }
    return current;
}
我也相信你加的逻辑也是错误的,应该是这样的

LinkEntry<E> new_element = new LinkEntry<E>();
new_element.element = e;
if (head == null) {
    head = new_element;
    tail = head;
} else {
    tail.next = new_element;
    new_element.previous = tail;
    tail = new_element;
}

size++;  // You don't use size it looks like...  and your size starts at 1 which is 
         // wrong, it should start at 0 since it's empty, also remove would have to
         // update size.
return true;
LinkEntry新元素=新LinkEntry();
新元素=e;
if(head==null){
head=新的_元素;
尾=头;
}否则{
tail.next=新的_元素;
new_element.previous=尾部;
尾=新的_元素;
}
大小++;//你不用尺寸看起来像。。。你的尺码从1开始,也就是
//错误,它应该从0开始,因为它是空的,还必须删除
//更新大小。
返回true;

除删除方法外,其他所有方法现在都正常工作。对不起,我现在看到了更改。检查current.previous是否为空。
LinkEntry<E> current = head;
if (n == 0) {
    // something like this maybe...
    head = head.next;
    if (head != null) { head.previous = null; }
    return current;
}
 current.previous.next == current (is true)
 current.next.previous == current (is true)
if (n == i++) {
    // We're at the spot so let's remove it.
    current.previous.next = current.next;
    if (current.next != null) { current.next.previous = current.previous; }
    return current;
}
LinkEntry<E> new_element = new LinkEntry<E>();
new_element.element = e;
if (head == null) {
    head = new_element;
    tail = head;
} else {
    tail.next = new_element;
    new_element.previous = tail;
    tail = new_element;
}

size++;  // You don't use size it looks like...  and your size starts at 1 which is 
         // wrong, it should start at 0 since it's empty, also remove would have to
         // update size.
return true;