1. Article
  2. Programming
  3. Struktur Data Single Linked List

Struktur Data Single Linked List

Wednesday, 12 March 2025 | Arbath Abdurrahman
Struktur Data Single Linked List

      Single Linked List adalah salah satu dasar dalam struktur data yang terdiri dari beberapa Node berisi Data dan Pointer ke Node berikutnya, sehingga setiap Node akan saling tehubung menjadi sekumpulan data dimulai dari Node pertama yaitu Head yang berupa data sampai dengan Node terakhir yaitu Tail yang bernilai null.

Pointer Single Linked List.png

Karakteristik

  1. Ukurannya Dinamis bisa bertambah atau berkurang secara dinamis menyesuaikan dengan kebutuhan
  2. Traversal, untuk mencari data tertentu kita harus menelusuri satu-persatu dari Head sampai dengan Tail.
  3. Non Indeks, Single linked list tidak bisa diakses langsung menggunakan indeks seperti array karena memiliki struktur penyimpanan data yang berbeda. Array menyimpan data secara berurutan didalam memori tetapi single linked list menyimpan data secara acak dan saling terhubung melalui Pointer

Penambahan

1. Diawal

penambahan diawal SLL.png

Untuk menambahkan data diawal pada Single Linked List Node baru akan menjadi Head sedangkan Node lama akan bergeser ke next

Kode java :

public void insertAtHead(int data) {
    Node newNode = new Node(data);
    newNode.next = head;  // Hubungkan node baru ke head lama
    head = newNode;       // Perbarui head ke node baru
}

 

2. Spesifik

penambahan ditengah sll.png

 

Node baru akan ditempatkan diantara dua Node yang sudah ada dengan cara mencari node yang setelahnya ingin kita tambahkan node baru lalu buat node baru setelah itu atur next node baru ke next dari node yang ditemukan dan ubah next dari node lama agar merujuk ke node baru.

Kode java:

public void insertAfter(int key, int data) {
    Node temp = head;
    while (temp != null && temp.data != key) { // Cari node dengan nilai key
        temp = temp.next;
    }
    if (temp == null) return; // Jika tidak ditemukan
    Node newNode = new Node(data);
    newNode.next = temp.next; // Hubungkan node baru ke node setelahnya
    temp.next = newNode; // Hubungkan node lama ke node baru
}

3. Diakhir

penambahan diakhir.png

Node baru akan ditambahkan kedalam data sebelum Tail dengan cara mencari Node yang memiliki next bernilai null lalu ubah next agar memiliki Pointer ke Node baru

Kode Java :

public void insertAtEnd(int data) {
    Node newNode = new Node(data);
    if (head == null) {
        head = newNode; // Jika list kosong
        return;
    }
    Node temp = head;
    while (temp.next != null) { // Cari node terakhir
        temp = temp.next;
    }
    temp.next = newNode; // Tambahkan node baru di akhir
}

 Full code Java : Github

Penghapusan

1. Diawal

penghapusan diawal sll.png

Penghapusan diawal akan menghapus Node pertama alias Head dengan cara menyimpan Head saat ini kedalam temp agar akses data tidak hilang lalu pindahkan Pointer ke Node selanjutnya agar menjadi Head.

Kode Java:

public void deleteHead() {
    if (head == null) return; // Jika list kosong, tidak perlu dihapus
    head = head.next; // Pindahkan head ke node berikutnya
}

 

2. Spesifik

 penghapusan spesifik.png

Cari Node yang akan dihapus lalu ubah Pointer next dari node sebelumya agar melewati node yang akan dihapus.

Kode Java:

public void deleteNode(int key) {
    if (head == null) return;
    // Jika node pertama yang harus dihapus
    if (head.data == key) {
        head = head.next;
        return;
    }
    Node temp = head;
    Node prev = null;
    while (temp != null && temp.data != key) { // Cari node yang akan dihapus
        prev = temp;
        temp = temp.next;
    }
    if (temp == null) return; // Jika node tidak ditemukan
    prev.next = temp.next; // Lewati node yang akan dihapus
}

 

3. Diakhir

 penghapusan diakhir sll.png

Telusuri Node sebelum Tail lalu hapus Node tersebut dengan cara mengubahnya menjadi null

Kode Java:

public void deleteTail() {
    if (head == null || head.next == null) { // Jika list kosong atau hanya 1 elemen
        head = null;
        return;
    }
    Node temp = head;
    while (temp.next.next != null) { // Cari node sebelum terakhir
        temp = temp.next;
    }
    temp.next = null; // Putuskan koneksi node terakhir
}

 

Full code Java : Github

#tutorial #datastructure #java #singlelinkedlist #education
Comments (1)
alghazali_2
Achmad Al Ghazali

1 month ago

mantap min

M

mulyo

1 month ago

mantap