связанный список в java вставить в конце

Ребята, у меня проблема при вставке нового узла в конец списка. вставка в начале работает нормально, но вставка в конце показывает исключение нулевого указателя.

Пожалуйста, посмотрите в методе inserAtEnd и предложите мне, как с этим бороться:

package linkedlist;

class Node{
    Node next;
    Object data;
    Node(Object x)
    {
        data=x;
    }
}
class LL
{
    Node first;

    LL(Node f)
    {
       first =f;
    }
    void insertAtBeg(Object x)
    {

        Node n= new Node(x);
        n.next=first;
        first=n;

    }
    void insertAtEnd(Object x)
    {
        Node n= new Node(x);
        Node k;
        k=first;
        while(k!=null)
        {
            k=k.next;
        }

      k.next=n;


    }
    void print()
    {

        Node p=first;
        while(p!=null)
        {

            System.out.print(p.data+"-->");
            p=p.next;
        }
    }

}
public class LinkedList {


    public static void main(String[] args) {
        LL l = new LL(null);
        l.insertAtBeg("Raj");
        l.insertAtBeg("Am ");
        l.insertAtBeg("I ");
        l.insertAtBeg("100 ");
        l.insertAtEnd("Hello");
        l.print();
        System.out.println("returned in main");

    }

}

person Raj Gawade    schedule 02.08.2015    source источник
comment
Предоставьте всю трассировку стека, чтобы мы знали, где возникает ошибка.   -  person NitrogenReaction    schedule 02.08.2015
comment
Кроме того, добавьте языковой тег (похоже на Java, но я не уверен). Кроме того, соблюдайте соглашения Java (если это даже Ява).   -  person NitrogenReaction    schedule 02.08.2015
comment
В следующий раз я позабочусь об этом :)   -  person Raj Gawade    schedule 09.08.2015


Ответы (1)


Проблема в том, что ваш цикл продолжается до тех пор, пока k не станет нулевым, вы хотите идти до тех пор, пока k.next не станет равным нулю. Вы также можете решить эту проблему, указав переменную для последнего узла (это то, что делается почти всегда). Код, который я предоставил, устраняет проблему без добавления каких-либо новых переменных:

void insertAtEnd(Object x) {
    Node n= new Node(x);
    Node k;
    k=first;

    while(k.next != null) {
        k=k.next;
    }

    k.next=n;
}
person NitrogenReaction    schedule 02.08.2015
comment
Мой ответ решает вашу проблему, поэтому не могли бы вы принять его или сказать мне, что еще я могу добавить? - person NitrogenReaction; 04.08.2015
comment
спасибо, сэр, ваш ответ решил мою проблему. Теперь это работает :) - person Raj Gawade; 09.08.2015
comment
Рад, что смог помочь. Однако я был бы признателен, если бы вы приняли мой ответ. - person NitrogenReaction; 09.08.2015