PERTEMUAN 07
Struktur Data – Linked List
LINKED LIST
(LANJUTAN)
160 menit · Manipulasi Pointer
Menguasai operasi insert dan delete. Kunci utama dalam membangun struktur data yang dinamis.
Review
⏪ Review Pertemuan 6
Apa itu Linked List? Koleksi node dinamis.
📦Struktur Node: Memiliki Data dan Pointer Next.
🔗Pointer next: Menyimpan alamat node berikutnya.
🚶‍♂️Traversal: Mengunjungi setiap node dari Head ke NULL.
Struktur
🏗 Struktur Node

Definisi dasar sebuah node dalam Singly Linked List:

struct Node {
    int data;
    Node* next;
};
INGAT
Node* adalah tipe data pointer yang menunjuk ke objek bertipe Node.
Visualisasi
🖼 Visual Linked List
HEAD
10
20
30
NULL

Pointer next menghubungkan satu node ke node berikutnya.

Tujuan
🎯 Tujuan Hari Ini
Insert node: Menambah data baru di berbagai posisi.
Delete node: Menghapus data dari list.
🧠Logika Pointer: Memahami urutan perubahan pointer agar data tidak hilang.
Operasi
🛠 Operasi Linked List

Operasi dasar yang sering dilakukan:

📍Insert (Depan, Belakang, Tengah)
🗑Delete (Depan, Belakang, Tengah)
🔍Search (Pencarian Data)
🚶‍♂️Traversal (Penelusuran)
Insert
🆕 Insert di Depan

Langkah-langkah menyisipkan node di posisi paling awal:

  1. Buat node baru: Alokasikan memori dan isi datanya.
  2. Hubungkan ke List: Set next node baru ke head saat ini.
  3. Update Head: Pindahkan head ke node baru tersebut.
⚠️ Jangan update head sebelum langkah 2, atau Anda akan kehilangan sisa list!
Kode
💻 Kode Insert Depan
void insertDepan(Node*& head, int nilai) {
    Node* baru = new Node; // 1. Buat node
    baru->data = nilai;
    baru->next = head;     // 2. Sambungkan ke head lama
    head = baru;           // 3. Head sekarang di node baru
}

*Simbol & pada Node*& head berarti kita mengirim pointer secara reference agar perubahan di dalam fungsi permanen.

Insert
🔚 Insert di Belakang

Langkah-langkah menyisipkan node di posisi terakhir:

  1. Buat node baru: Set next-nya ke NULL.
  2. Cek List: Jika kosong, jadikan node baru sebagai head.
  3. Traversal: Cari node terakhir (yang next-nya NULL).
  4. Hubungkan: Ubah next node terakhir ke node baru.
Kode
💻 Kode Insert Belakang
void insertBelakang(Node*& head, int nilai) {
    Node* baru = new Node;
    baru->data = nilai;
    baru->next = NULL;

    if (head == NULL) { // Jika list kosong
        head = baru;
        return;
    }

    Node* temp = head;
    while (temp->next != NULL) { // Cari ekor
        temp = temp->next;
    }
    temp->next = baru; // Sambungkan
}
Insert
📍 Insert Setelah Node

Menyisipkan di tengah-tengah list:

  1. Cari target: Temukan node yang akan menjadi "sebelum" node baru.
  2. Set next baru: baru->next = target->next;
  3. Update target: target->next = baru;
Urutan 2 dan 3 tidak boleh tertukar!
Delete
🗑 Delete di Depan

Langkah-langkah menghapus node pertama:

  1. Simpan head: Gunakan pointer temp untuk menunjuk ke head.
  2. Geser head: Pindahkan head ke head->next.
  3. Hapus: Gunakan keyword delete pada temp.

Menghapus pointer saja tidak cukup, kita harus membebaskan memori yang digunakan.

Kode
💻 Kode Delete Depan
void deleteDepan(Node*& head) {
    if (head == NULL) return; // List kosong

    Node* temp = head;    // 1. Simpan alamat lama
    head = head->next;    // 2. Loncat ke node ke-2
    delete temp;          // 3. Bebaskan memori
}
Delete
🎯 Delete Node Tertentu

Menghapus node di tengah atau belakang:

  1. Cari node: Gunakan curr untuk mencari node yang dihapus.
  2. Lacak Prev: Simpan node sebelumnya di prev.
  3. Hubungkan: Set prev->next = curr->next;
  4. Hapus: delete curr;
Playground
🕹 Simulasi Interaktif

Coba sendiri operasi insert dan delete dengan interaksi di bawah:

List Kosong. Klik tanda + untuk menambah.
* Hover di antara node untuk Insert
* Klik pada node untuk Delete
Common Mistakes
⚠️ Kesalahan Umum
💔Lupa update pointer: Mengakibatkan list terputus.
🚫Tidak handle NULL: Mengakses ->next pada pointer NULL (Crash).
💧Memory leak: Menghapus pointer tapi lupa men-delete objek di heap.
🔄Salah urutan: Menghilangkan akses ke sisa list sebelum menyambungkannya.
Latihan
🤔 Latihan Analisis

Jika kita memiliki list kosong, apa hasil akhir dari operasi berikut?

  1. insertDepan(10)
  2. insertDepan(5)
  3. deleteDepan()
Penjelasan
💡 Penjelasan Jawaban
1. insertDepan(10) → List: [10]
2. insertDepan(5) → List: [5, 10] (5 jadi head baru)
3. deleteDepan() → List: [10] (5 dihapus)

Jadi, nilai yang tersisa di dalam list adalah 10.

Project
📂 Mini Project

Buatlah program C++ dengan sistem menu interaktif:

1Opsi 1: Insert Node (Depan/Belakang).
2Opsi 2: Delete Node (Depan).
3Opsi 3: Tampilkan List (Traversal).
0Opsi 0: Keluar.
Summary
📌 Ringkasan Materi
Linked list sangat fleksibel dalam penambahan/penghapusan data.
Pointer adalah kunci: Selalu hubungkan node baru ke sisa list sebelum memutus pointer lama.
Urutan operasi: Menentukan keberhasilan manipulasi list.
Exam Prep
📝 Preview UTS

Topik yang kemungkinan besar muncul terkait Linked List:

Trace Pointer: Menentukan isi list setelah sekumpulan operasi.
Analisis Struktur: Memilih jenis linked list yang tepat untuk masalah tertentu.
Logika Algoritma: Bukan sekadar menghafal kode, tapi memahami alurnya.
Closing
👋 Sampai Jumpa!
"Kalau pointer salah, data hilang."

Gunakan playground di Slide 15 untuk melatih intuisi pointer Anda!