java - Java中删除LinkedList中的节点

标签 java list

好的,我了解了链表的基础知识。我知道每个节点如何引用下一个节点,并且我知道它们是如何联系在一起的。

我的代码运行没有任何问题,但问题是我只是不明白它是如何工作的(是的......)

我的问题是关于删除链表中的节点。假设我要删除列表中的一个人,该人位于列表的中间。在我的方法中,我只是创建了 nextPerson 的临时变量,并使用正确的逻辑,我删除了该节点,但之后我不会更改“全局”nextPerson 中的任何内容。问题是..它显然会影响firstPerson,并且实际上会从firstPerson 中删除相同的节点。

我知道链表很困惑,我的问题也是如此。但如果有什么我不清楚的,我可以进一步解释..

  public class Store
{
    private Person firstPerson;

    void newPerson(Person person)
    {
    if (firstPerson == null)
    {
        firstPerson = person;
    }
    else
    {
        person.nextPerson = firstPerson;
        firstPerson = person;
    }
}

void checkout()
{
    Person temp = firstPerson;
    while (temp.nextPerson != null)
    {
        System.out.println(temp.getName() + " bought" + temp.getItem() + ".");
        System.out.println("- Hade bra!");
        temp = temp.nextPerson;
    }
}

//THIS METHOD:
boolean deletePerson(String name)
{


    Person temp = firstPerson;
    if (temp.getName().equals(name))
    {
        temp = temp.nextPerson;
    }
    else
    {
        while (temp.nextPerson != null)
        {
            if (temp.nextPerson.getName().equals(name))
            {
                //REMOVING THE NODE
                temp.nextPerson = temp.nextPerson.nextPerson;
                //NOT CHANGING ANYTHING IN "firstPerson", STILL CHANGES IT
                return true;
            }
            else
            {
                temp  = temp.nextPerson;
            }
        }
    }
    return false;

    }
}



 public class Person
{
private String name, item;
Person nextPerson;

Person(String name, String item)
{
    this.name = name;
    this.item = item;
}

public String getItem()
{
    return item;
}

public String getName()
{
        return name;
    }
}

最佳答案

在java中,包含对象的变量实际上包含对对象的引用,因此当您将temp分配给firstperson时,每次使用temp时相当于使用 firstperson 因为它们都引用内存中的同一个对象。

关于java - Java中删除LinkedList中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783365/

相关文章:

c++ - 我们可以在一个 STL 列表中保存 2 种数据类型吗?

java - Selenium - WebElement 对象是存储它们的数据还是检索它 "live"?

java - 哪个结果验证签名的 XML - 核心验证、签名验证和引用验证

java - Android FinalizerDaemon 挂了

java - 如何根据指定条件从数据库列表中检索项目

python - 从列表中提取特定数据条目(作为组)并存储在单独的列表中?

r - 如何通过系统地重新排列现有 data.frames 列表中的列来创建新的 data.frames 列表

java - 如何将 LinkedBlockingQueue<Runnable> 创建为 Spring bean?

python - 如何使用Python从dict中提取具有特定模式的键列表?

python - 枚举列表中的唯一字符串