好的,我了解了链表的基础知识。我知道每个节点如何引用下一个节点,并且我知道它们是如何联系在一起的。
我的代码运行没有任何问题,但问题是我只是不明白它是如何工作的(是的......)
我的问题是关于删除链表中的节点。假设我要删除列表中的一个人,该人位于列表的中间。在我的方法中,我只是创建了 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/