Метод для вставки и удаления узла в конце связанного списка - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь написать метод для вставки узла и удаления узла в конце связанного списка. Вот основной класс, в котором я пишу методы. Они внизу (insertBack и removeBack):

publi c class LinkedList {частная голова LinkedListNode;

public LinkedList()
{
    head = null;
}

public LinkedListNode getHead()
{
    return head;
}
public void setHead(LinkedListNode h)
{
    head = h;
}

public void insertFront(Object item)
{
    if (head == null)
    {
        LinkedListNode nextNode = new LinkedListNode (item);
        head = nextNode;
    }
    else
    {
        LinkedListNode nextNode = new LinkedListNode (item);
        nextNode.setNext(head);
        head = nextNode;
    }
}

public Object removeFront()
{
    if (head == null)
    {
        return head;
    }
    else
    {
        LinkedListNode t = head;
        Object ret = head.getData();
        head = head.getNext();
        t.setNext(null);
        t = null;
        return ret;
    }

}


//insert a front at the end of linked list
public void insertBack(Object myData)
{
    LinkedListNode newNode = new LinkedListNode(myData);

    if (head == null)
    {
        head = newNode;

    }
    else
    {
        LinkedListNode current = head;
        while (current.getNext() != null)
        {
            current = current.getNext();
        }
        current.setNext(newNode);

    }
}

//remove a node at the end of linked list
public Object removeBack()
{

    if (head == null)
    {
        return null;
    }
    if (head.getNext() == null)
    {
        return null;
    }

    LinkedListNode secondToLast = head;
    while (secondToLast.getNext().getNext() != null)
    {
        secondToLast = secondToLast.getNext();
    }

    secondToLast.setNext(null);
    return head.getData();

}

}

Вероятно, при вставке этой ошибки, возможно, возникли ошибки форматирования, но я все еще пытаюсь понять, как использовать этот сайт. Когда я запускаю свой класс драйверов, показанный ниже, я получаю результаты, показанные ниже.

public static void main(String[] args)
{
    ValueData data1 = new ValueData("a", 50);
    ValueData data2 = new ValueData("b", 70);
    ValueData data3 = new ValueData("c", 100);

    LinkedList myList = new LinkedList();

    //practice insertBack and removeBack
    myList.insertBack(data1);
    myList.insertBack(data2);
    myList.insertBack(data3);

    System.out.println("Test insertBack and removeBack");

    System.out.println((ValueData) myList.removeBack());
    System.out.println((ValueData) myList.removeBack());
    System.out.println((ValueData) myList.removeBack());
    System.out.println();


    //compare insertFront and removeFront
    System.out.println("Test insertFront and removeFront");
    myList.insertFront(data1);
    myList.insertFront(data2);
    myList.insertFront(data3);

    System.out.println((ValueData)myList.removeFront());
    System.out.println((ValueData)myList.removeFront());
    System.out.println((ValueData)myList.removeFront());
    System.out.println();

RESULTS
Test insertBack and removeBack
a 50.0
a 50.0
null

Test insertFront and removeFront
c 100.0
b 70.0
a 50.0

Может кто-нибудь помочь мне выяснить, почему мои методы removeFront и removeBack не работают?

1 Ответ

0 голосов
/ 14 апреля 2020

Прежде всего, этот код не нужен, так как объект, на который нет ссылки, будет просто отброшен.

t.setNext(null);
t = null;

Это также может помочь удалить BackBack ()

if(head == null) {
   return null;
}

LindedListNode current = head;

while(current.getNext() != null) //searching for last node
   current = current.getNext();

current = null; //make the last node null 
...