java - 尝试删除用户定义的双向链表中特定位置的元素

标签 java linked-list doubly-linked-list

这是一个旧作业问题,我已经交了,但我无法弄清楚。我正在尝试使用用户定义的类从特定索引处的 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/

相关文章:

java - Spring Boot MongoRepository 空指针异常

java - 如何在 contextInitialized() 中获取所有 actionbean 类

Java集合问题

c++ - 无法弄清楚如何通过仅使用类的函数删除整个链表

c - 读取二进制文件到链表中,(只读取最后一个节点)

java - DoublyLinkedList 节点操作未按预期工作,为 .prev 函数提供了错误的节点数据

java - Android 从第一个 Activity 发送事件并在第二个 Activity 上接收

java - 使用队列解耦程序

c - C-删除节点函数中的双向链表

java - 使用 self 作为参数创建实例