Skip to content

LinkedList [02. Insert Last]

Updated: at 11:12 PM

Table of contents

Open Table of contents

LinkedList

LinkedList adalah struktur data linear di mana setiap elemen disebut node, dan setiap node memiliki dua bagian: data dan referensi ke node berikutnya dalam urutan.

Insert Last

Fungsi insertLast pada linked list digunakan untuk menyisipkan elemen baru di akhir linked list. Berikut adalah langkah-langkahnya:

  1. Buat node baru: Buat node baru dengan nilai yang ingin disisipkan. Node ini akan menjadi node terakhir dalam linked list setelah operasi penyisipan.
  2. Temukan node terakhir: Temukan node terakhir dalam linked list. Ini dapat dilakukan dengan menelusuri linked list dari awal hingga node yang next pointernya bernilai nullptr (null).
  3. Hubungkan node baru: Hubungkan node baru ke node terakhir. Hal ini dilakukan dengan mengatur next pointer dari node terakhir untuk menunjuk ke node baru.
  4. Perbarui head (opsional): Dalam beberapa kasus, operasi insertLast mungkin memerlukan pembaruan pointer head jika linked list awalnya kosong. Hal ini terjadi ketika linked list kosong dan node baru menjadi node pertama.

Dengan melakukan langkah-langkah ini, elemen baru berhasil dimasukkan ke akhir LinkedList, dan node lama terhubung dengan node terbaru.

Import Library

#include <iostream>

Baris ini menyertakan file header iostream. File ini menyediakan fungsi-fungsi untuk operasi input dan output dalam C++. Ini diperlukan untuk menggunakan std::cout untuk mencetak ke konsol.

Node

struct Node {
    int data;
    Node* next;
};

Baris ini mendefinisikan struktur kustom bernama Node. Ini berfungsi sebagai blok penyusun untuk elemen linked list.

  1. int data: Variabel anggota ini di dalam struktur Node menyimpan nilai data aktual yang akan disimpan oleh setiap node dalam linked list.
  2. Node* next: Variabel anggota ini adalah pointer yang menunjuk ke node berikutnya dalam linked list. Ini memungkinkan node untuk dihubungkan bersama, membentuk struktur seperti rantai pada linked list.

Insert Last

void insertLast(Node** head_ref, int new_data) {
    Node* new_node = new Node();
    Node* last = *head_ref;

    new_node->data = new_data;
    new_node->next = nullptr;

    if (*head_ref == nullptr) {
        *head_ref = new_node;
        return;
    }

    while (last->next != nullptr) {
        last = last->next;
    }

    last->next = new_node;
}

Fungsi ini menambahkan node baru dengan nilai data tertentu (new_data) ke akhir linked list. Ia mengambil dua argumen:

  1. Node** head_ref: Ini adalah pointer ganda yang menunjuk ke head (kepala) dari linked list. Penggunaan pointer ganda memungkinkan fungsi untuk memodifikasi pointer head itu sendiri jika perlu.
  2. int new_data: Ini adalah nilai integer yang akan disimpan dalam member data node baru.

Berikut rincian langkah-langkah fungsi:

  1. Node* new_node = new Node(): Membuat objek Node baru secara dinamis menggunakan new dan menetapkannya ke pointer new_node.
  2. Node* last = *head_ref: Membuat pointer last dan menginisialisasinya dengan nilai current dari pointer head. Ini akan digunakan untuk melintasi list untuk menemukan node terakhir.
  3. new_node->data = new_data;: Mengatur member data dari node yang baru dibuat new_node ke nilai new_data yang disediakan.
  4. new_node->next = nullptr;: Mengatur pointer next dari node baru ke nullptr karena ini akan menjadi node terakhir pada awalnya.
  5. if (*head_ref == nullptr): Memeriksa apakah linked list kosong (yaitu, head adalah nullptr).
  1. while (last->next != nullptr): Loop ini berulang hingga mencapai node terakhir dalam list.
  2. last = last->next;: Memindahkan pointer last ke node berikutnya dalam list.
  3. last->next = new_node;: Setelah loop selesai, last menunjuk ke node terakhir. Baris ini mengatur pointer next dari node terakhir untuk menunjuk ke new_node yang baru dibuat, secara efektif menambahkannya ke akhir list.
void printLinkedListWithAddress(Node* head) {
    Node* current = head;
    while (current != nullptr) {
        std::cout << "Alamat: " << current
                  << " - Data: " << current->data 
                  << " - Alamat Next: " << current->next << std::endl;
        current = current->next;
    }
}

Fungsi printLinkedListWithAddress ini bertugas untuk mencetak isi dari linked list, beserta alamat memori dari setiap node.

Penjelasan langkah demi langkah:

  1. Node* current = head;: Baris ini membuat pointer current dan menginisialisasinya dengan nilai pointer head. Pointer current akan digunakan untuk beriterasi melalui linked list.

  2. while (current != nullptr): Loop while ini akan berulang selama current tidak menunjuk ke nullptr (null). Artinya, loop akan terus berjalan selama current masih menunjuk ke node yang valid di dalam linked list.

  3. std::cout << “Alamat: ” << current << ” - Data: ” << current->data << ” - Alamat Next: ” << current->next << std::endl;: Baris ini mencetak informasi terkait node yang sedang ditunjuk oleh current.

  1. current = current->next;: Baris ini memperbarui pointer current untuk menunjuk ke node berikutnya di dalam linked list. Ini dilakukan dengan mengakses member next dari struktur Node yang sedang ditunjuk oleh current.

  2. std::endl;: Baris ini menambahkan newline character (\n) ke output, sehingga informasi dari setiap node dicetak pada baris yang berbeda.

Dengan loop while dan pembaruan pointer current, fungsi ini akan terus mencetak informasi dari setiap node hingga mencapai node terakhir, yang ditandai dengan member next bernilai nullptr. Ini akan memberikan gambaran lengkap tentang isi linked list, beserta alamat memori dari setiap node-nya.

Main

int main() {
    Node* head = nullptr;

    insertLast(&head, 1);
    insertLast(&head, 3);
    insertLast(&head, 5);
    insertLast(&head, 7);

    std::cout << "Linked List : " << std::endl;
    printLinkedListWithAddress(head);

    return 0;
}

Hasil Compile

Linked List : 
Alamat: 0x194c320 - Data: 1 - Alamat Next: 0x194beb0
Alamat: 0x194beb0 - Data: 3 - Alamat Next: 0x194bed0
Alamat: 0x194bed0 - Data: 5 - Alamat Next: 0x194bef0
Alamat: 0x194bef0 - Data: 7 - Alamat Next: 0



=== Code Execution Successful ===

Note

Saya membuat kode ini setelah mempelajari materi dari YouTube serta mencari informasi dari beberapa sumber di internet. Saya membuat kode menggunakan compiler online yaitu Programiz.

keep on track.