简单LinkedList在Java中的自实现

简单LinkedList在Java中的自实现,java,list,linked-list,Java,List,Linked List,我正在读一篇关于用Java实现简单LinkedList的文章,并对它进行了修改,几乎并没有对我的小项目进行任何更改。除删除方法外,一切正常。 交易是,我必须删除相应的元素。我的意思是(这是我的删除方法): 因此,问题在于如下-当我删除列表中的第一个obj(通过将其设置为remove参数)时,它会消失,但如果我尝试删除第二个或任何其他对象,则我想要删除的对象之后的下一个对象会被删除。 我将感谢任何帮助,提前谢谢。如果需要更多信息,请填写我的LinkedList的完整代码。问题似乎出现在代码的这一部

我正在读一篇关于用Java实现简单LinkedList的文章,并对它进行了修改,几乎并没有对我的小项目进行任何更改。除删除方法外,一切正常。
交易是,我必须删除相应的元素。我的意思是(这是我的删除方法):

因此,问题在于如下-当我删除列表中的第一个obj(通过将其设置为remove参数)时,它会消失,但如果我尝试删除第二个或任何其他对象,则我想要删除的对象之后的下一个对象会被删除。

我将感谢任何帮助,提前谢谢。如果需要更多信息,请填写我的LinkedList的完整代码。

问题似乎出现在代码的这一部分:

    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();
        }
    }
linkCurr=head;
if(head!=null){
对于(int i=0;i
这是在列表中搜索与输入节点匹配的节点。然后,它将该节点的下一个链接设置为下线的节点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();
        }
    }
linkCurr=head;
Link-previous=null;
if(head!=null){
对于(int i=0;i
问题似乎出现在代码的这一部分:

    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();
        }
    }
linkCurr=head;
if(head!=null){
对于(int i=0;i
这是在列表中搜索与输入节点匹配的节点。然后,它将该节点的下一个链接设置为下线的节点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();
        }
    }
linkCurr=head;
Link-previous=null;
if(head!=null){
对于(int i=0;i
谢谢你,@Marshall Tigerus。你的字条很好,我非常感激。除最后一个元素外,它对所有元素都很有效。就像在我的示例中一样,task5没有被删除,而且大小甚至没有减少。这意味着,我猜,在这种情况下,如果我试图删除最后一个元素,它甚至不会输入if语句。尝试在for循环中将其更改为I++而不是++I,或者将其更改为I Yeah,已经找到了。你知道,修复尝试的残余。无论如何,非常感谢你,马歇尔。你帮了大忙。祝你好运谢谢你,马歇尔·蒂格罗斯。你的字条很好,我非常感激。除最后一个元素外,它对所有元素都很有效。就像在我的示例中一样,task5没有被删除,而且大小甚至没有减少。这意味着,我猜,在这种情况下,如果我试图删除最后一个元素,它甚至不会输入if语句。尝试在for循环中将其更改为I++而不是++I,或者将其更改为I Yeah,已经找到了。你知道,修复尝试的残余。无论如何,非常感谢你,马歇尔。你帮了大忙。祝你好运