java - Java 简单LinkedList 的 self 实现

标签 java list linked-list

我正在阅读 this关于在 Java 中实现简单 LinkedList 的文章,并在几乎没有对我的小项目进行任何更改的情况下对其进行了调整。一切正常,但删除方法。
交易是我必须删除相应的元素。我的意思是(这是我的删除方法):

private Link head;

public void remove(Object obj) {
    if (task == null)
        System.out.println("no");
    else {
        Link linkCurr = head;
        if (head != null) {
            for (int i = 0; i < size; ++i) {
                if (obj.equals(linkCurr.getData())){
                    linkCurr.setNext(linkCurr.getNext().getNext());
                    size--;
                    break;
                }
                linkCurr = linkCurr.getNext();
            }
        }
    }
}

也就是操作节点和链接逻辑的类。

private class Link 
{ 
    Link next;

    Object data;

    public Link(Object data) {
        next = null;
        this.data = data;           
    }

    public Task getData() {
        return data;
    }

    public Link getNext() {
        return next;
    }

    public void setNext(Link next) 
    {
        this.next = next;
    }  
}

所以,问题如下 - 当我删除列表中的第一个 obj 时(通过将其设置为 remove 的参数) - 它消失了,但是如果我尝试删除第二个或其他任何一个,在我想要的被删除之后的下一个。
我将不胜感激任何帮助,在此先感谢。如果需要更多信息,我的 LinkedList 的完整代码 here! .

最佳答案

问题似乎出在这段代码中:

    Link linkCurr = head;
    if (head != null) {
        for (int i = 0; i < size; ++i) {
            if (obj.equals(linkCurr.getData())){
                linkCurr.setNext(linkCurr.getNext().getNext());
                size--;
                break;
            }
            linkCurr = linkCurr.getNext();
        }
    }

这样做是在列表中搜索与输入节点匹配的节点。然后它将该节点的下一个链接设置为下行的节点 2,删除相邻节点。

您可能想要保留前一个节点的索引,并在其上执行 setnext,例如:

    Link linkCurr = head;
    Link previous = null;
    if (head != null) {
        for (int i = 0; i < size; ++i) 
        {
            if (obj.equals(linkCurr.getData()))
            {
                if (previous == null)
                {
                    head = linkCurr.getNext(); // sets 2nd position to head of list
                    size--;
                    break; 
                }
                previous.setNext(linkCurr.getNext()); // removes the node
                size--;
                break;
            }
            previous = linkCurr;
            linkCurr = linkCurr.getNext();
        }
    }

关于java - Java 简单LinkedList 的 self 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37860956/

相关文章:

c++ - 将树展平为链表c++,没有指针

Java解压缩字节数组-数据检查不正确

java - Uncaught ReferenceError : XXX is not defined with specific value

java - 嵌套 session /事务中的 Transaction.rollback 会发生什么?

c# - 使用 Linq 读取第 n 层列表并将所需数据保存到另一个列表

python - 更新列表中的 Python for 循环是如何工作的?

java - 显示表格标签以在单列中创建多个链接

python - 如何检查 float 字符串?

c - LinkedList - 如何释放使用 malloc 分配的内存

c - 遍历有和没有下一个字段的链表