这是一个旧作业问题,我已经交了,但我无法弄清楚。我正在尝试使用用户定义的类从特定索引处的 LinkedList 中删除元素。下面是我正在使用的伪代码,但它的参数与我的不同,因此我尝试修改它,但遇到了问题。我是一名编程新手(大约有 6 个月的经验),仅供引用。我理解 ArrayList 很好,但是 LinkedList 一直给我带来麻烦。
/*
* Remove the nth element in the list. The first element is element 1.
* Return the removed element to the caller.
function remove(List list, Node node)
if node.prev == null
list.firstNode := node.next
else
node.prev.next := node.next
if node.next == null
list.lastNode := node.prev
else
node.next.prev := node.prev
destroy node
*/
我的方法要求用户输入要删除的索引位置。因为 int 和 LinkEntry 是不同的类型,所以我自然会遇到问题。我不知道如何合并通过参数传递的 int。
public void remove(int n)
{
LinkEntry<E> remove_this = new LinkEntry<E>();
remove_this.element = n;
for (remove_this = head; remove_this != null; remove_this = remove_this.next)
{
//removes the head if list is only 1 item long
if (head.next == null)
head = remove_this.next;
else
//sets previous element to the next element
remove_this.previous.next = remove_this.next;
//if nothing comes after remove_this, then remove the tail element
if (remove_this.next == null)
tail = remove_this.previous;
else
//sets next previous element to current previous element
remove_this.next.previous = remove_this.previous;
}
}
如果您知道任何地方提供了与我试图解决的问题更相似的另一个示例,我将非常感激。我浏览了我的文字和在线内容,但没有运气。
最佳答案
您应该将计数器设置为零,从链接列表的第一个元素(显然名为“head”)开始浏览链接列表,然后递增计数器直到其等于 n(或者到达列表末尾)。
当计数器等于 n 时,您必须将上一个条目连接到下一个条目,并将下一个条目连接到上一个条目(因此它会断开第 N 个条目的连接)。您还必须处理特殊情况,当 n=1 时(您应该删除“head”条目,也就是说将 head 设置为 head.next),当 next 为 null(n = 列表长度)时,以及当 n 为负数或大于列表长度时。
关于java - 尝试删除用户定义的双向链表中特定位置的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12763736/