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