删除存储对象的链表中的节点

Deleting a node in a linked list storing an object

这是我的 linkedList class 中删除方法的代码。此方法在与整数和字符串一起使用时工作得很好,但在我将对象作为参数传递时不起作用。仅供参考:在 ListNode 中,我将其值存储为一个对象,即 getValue() 方法 returns 一个对象。

    public void delete(Object pObject)
    {
    DSAListNode currentNode=head;

    if(head.equals(pObject))
    {
        removeFirst();
    }
    else if(tail.equals(pObject))
    {
        removeLast();
    }
    else 
    {

     while(currentNode!=null)
    {
        DSAListNode previousNode=currentNode.getPrevious();
        DSAListNode nextNode=currentNode.getNext();

        if(currentNode.getValue().equals(pObject))
        {
              
                previousNode.setNext(nextNode);
                nextNode.setPrevious(previousNode);
        }

        currentNode=nextNode;
    }
    }

此方法适用于整数和字符串,但不适用于对象,示例如下:

    DSALinkedList list=new DSALinkedList();
    Connection connection1=new Connection("abc", "def", 10, 1, "stairs");
    Connection connection2=new Connection("ghi", "jkl", 10, 1, "stairs");
    Connection connection3=new Connection("mno", "pqr", 10, 2, "construction");

    list.insertLast(connection1);
    list.insertLast(connection2);
    list.insertLast(connection3);
    
    Connection tempConnection=new Connection("ghi", "jkl", 10, 1, "stairs");
    list.delete(tempConnection);

与 connection2 对象相同的 tempConnection 对象不会被删除。我认为我的 delete 方法在检查 2 个对象是否相等时有问题,我该如何更正它?

这里的问题是 tempConnection 是一个新对象,其参数与 connection2 相同。在您的删除方法中,您正在使用 equals 检查是否相等。

默认情况下,Java 将检查它们是否是相同的引用。在您的情况下,它们不是,因此不会被删除。

您需要覆盖 Connection class 中的 equals() 方法。在这里,您实际上将检查参数是否相同,而不是引用。

您的 delete 方法将按预期工作。