有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java按顺序从单链表中删除重复项

所以我有一个0.1,3.0,4.5,-1,3.0,-10.0,3.0,3.0的列表 我应该在下面的代码之后得到一个0.1,3.0,4.5,-1.0,-10.0的列表

public void removeDuplicates()
{
    if (head == null)
        return;

    Node iter = head;

    while (iter != null)
    {
        Node currNode = iter;
        while (currNode != null && currNode.next != null)
        {
            if (iter.value == currNode.next.value)
            {
                currNode.next = currNode.next.next;
                nItem--;
            }
            currNode = currNode.next;
        }
        iter = iter.next;
    }
}

我甚至用了一段时间,直到我修复并运行了它,然后意识到这里也出了问题

因为我现在得到0.1,3.0,4.5,-1.0,-10.0,3.0。为什么最后的3.0还在继续?我起初以为它可能是被圈起来的,但意识到我没有做过那种事。关于逻辑流程的建议


共 (1) 个答案

  1. # 1 楼答案

    在代码中,while (currNode != null && currNode.next != null)

    手术后的情况&&;运算符有currnode.next != null,实际上将忽略检查最后一个节点,因此将其删除

    编辑:

    此外,您还必须更改行if (iter.value == currNode.next.value)

    从现在起,它也将尝试检查currNode.next = null的最后一个节点。因此,您必须将其更改为:

    if (currNode.next != null && iter.value == currNode.next.value)
    

    总的来说,你应该从下一个节点开始检查,即:currNode=iter。接下来,保留上一个指针并更改检查相等的条件,如下所示:

    public void removeDuplicates()
    {
        if (head == null)
            return;
    
        Node iter = head;
    
        while (iter != null)
        {
            Node prevNode = iter;
            Node currNode = iter.next;
            while (currNode != null)
            {
                if (iter.value == currNode.value)
                {
                    prevNode.next = currNode.next;
                    nItem ;
                } else {
                    prevNode = currNode; //updating prevNode in case of not a match
                }
                currNode = currNode.next;
            }
            iter = iter.next;
        }
    }