在Java中删除LinkedList中的节点

时间:2016-04-22 01:46:35

标签: java list

Okey,所以我理解链接列表的基础知识。我知道每个节点如何引用下一个节点,我知道它是如何绑定的。

我的代码没有任何问题,但问题是我只是不知道它是如何工作的(是的......)

我的问题是删除链表中的节点。所以,假设我正在删除列表中间的人员。在我的方法中,我只是创建了一个nextPerson的临时变量,并且使用正确的逻辑,我正在删除该节点,但我之后不会更改“global”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;
    }
}

1 个答案:

答案 0 :(得分:1)

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