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.
Karakteristik
- Ukurannya Dinamis bisa bertambah atau berkurang secara dinamis menyesuaikan dengan kebutuhan
- Traversal, untuk mencari data tertentu kita harus menelusuri satu-persatu dari Head sampai dengan Tail.
- 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
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
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
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 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
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
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
1 month ago
mantap min
mulyo
1 month ago
mantap