daftar tertaut di java masukkan di akhir

Teman-teman, saya punya masalah saat memasukkan simpul baru di akhir daftar. penyisipan di awal berfungsi dengan baik tetapi penyisipan di akhir menunjukkan pengecualian penunjuk nol.

Silakan lihat di metode insertAtEnd dan sarankan saya cara menghadapinya:

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 sumber
comment
Harap berikan seluruh pelacakan tumpukan sehingga kami tahu di mana kesalahan terjadi.   -  person NitrogenReaction    schedule 02.08.2015
comment
Juga, harap tambahkan tag bahasa (Sepertinya Java, tapi saya tidak yakin). Selain itu, harap ikuti konvensi Java (Jika ini bahkan Jawa).   -  person NitrogenReaction    schedule 02.08.2015
comment
Lain kali aku akan mengurusnya :)   -  person Raj Gawade    schedule 09.08.2015


Jawaban (1)


Masalahnya adalah loop Anda berjalan hingga k bernilai nol, Anda ingin melanjutkan hingga k.next sama dengan nol. Anda juga bisa menyelesaikannya dengan memiliki variabel untuk node terakhir (Inilah yang hampir selalu dilakukan). Namun kode yang saya berikan memperbaiki masalah tanpa menambahkan variabel baru:

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
Jawaban saya menyelesaikan masalah Anda, jadi maukah Anda menerimanya atau memberi tahu saya apa lagi yang bisa saya tambahkan? - person NitrogenReaction; 04.08.2015
comment
terima kasih pak, jawaban anda memecahkan masalah saya. Ini berfungsi sekarang :) - person Raj Gawade; 09.08.2015
comment
Senang aku dapat membantu. Saya akan sangat menghargai jika Anda mau menerima jawaban saya. - person NitrogenReaction; 09.08.2015