Mengapa kode berikut tidak berfungsi dalam memasukkan simpul pada posisi tertentu dalam Daftar Tertaut?

Silakan lihat kode berikut dan beri tahu saya apa yang salah dengannya? Saya mencoba memasukkan simpul pada posisi tertentu tertentu dalam daftar tertaut. Kita perlu mengembalikan referensi ke node kepala setelah memasukkannya.

Node InsertNth(Node head, int data, int position) {
    Node newNode = new Node();
    newNode.data = data;

    if(head==null){
        newNode.next = head;
        return newNode;
    }
    Node first = head;

    while(position > 0 && head.next!=null){
        head = head.next;
        position -= 1;
    }

    newNode.next = head;
    head = newNode;
    return first;

}

person आनंद    schedule 09.11.2016    source sumber
comment
Semua masalahnya ada di 3 baris terakhir itu. Anda tidak pernah menugaskan newNode ke next apa pun.   -  person 4castle    schedule 09.11.2016


Jawaban (1)


Ya, ada sesuatu yang salah. Setelah loop while, Anda mencoba memasukkan newNode SEBELUM head, tetapi ini tidak berhasil. Baris head=newNode; tidak berguna.

Entah Anda memerlukan penunjuk lain untuk menunjuk ke simpul sebelum head, sehingga Anda dapat menyisipkan newNode di antara dua penunjuk ini, atau Anda perlu menghentikan perulangan while satu langkah sebelumnya, dan menyisipkan newNode SETELAH head. Inilah solusi kedua:

 while(position > 1 && head.next!=null){ //0 is replaced by 1 here
    head = head.next;
    position -= 1;
}

newNode.next = head.next;
head.next = newNode;
return first;

[EDIT]

Dalam solusi ini, Anda perlu menangani kasus khusus ketika position sama dengan 0 dengan menambahkan kode berikut tepat sebelum perulangan while:

if(position==0) {
    newNode.next = head.next;
    return newNode;
}
person AhmadWabbi    schedule 09.11.2016
comment
Terima kasih. Bagaimana jika posisinya 0 atau 1? Ini tidak berhasil untuk itu. - person आनंद; 09.11.2016
comment
Posisi 1 berfungsi dengan baik: loop tidak berulang sama sekali dan newNode dimasukkan setelah head, yang merupakan posisi 1 yang benar. Sedangkan untuk posisi 0, Anda benar, tidak berfungsi. Anda perlu menambahkan kasus khusus untuk itu. Saya akan mengubah jawabannya. - person AhmadWabbi; 09.11.2016