๐ Daftar Isi
Pada artikel sebelumnya kita telah melakukan operasi penambahan node pada single linked list. Pada artikel kali ini kita akan melanjutkan ke operasi penghapusan node single linked list.
Menghapus Node (Delete)
Delete node pertama (head) dari linked list
mynode remove_first(mynode head)
{
if (head == NULL)
return;
mynode first = head;
head = head->next;
first->next = NULL;
free(first);
return(head);
}
Jika linked list empty (head == null) maka keluar dari fungsi.
Jika tidak:
- Node first diarahkan pada node head
- Node head diarahkan pada node setelah head
- Bebaskan node first (secara otomatis data pada node pertama terhapus)
Delete node terakhir (tail) dari linked list
mynode remove_last(mynode head)
{
if (head == NULL)
return;
mynode cursor = head;
mynode back = NULL;
while (cursor->next != NULL)
{
back = cursor;
cursor = cursor->nexr;
}
if (back != NULL)
back->next = NULL;
free(cursor);
return(head);
}
Jika linked list empty keluar dari fungsi.
Jika tidak:
- Iterasi dari head untuk mencari node terakhir (cursor) dan node sebelum terakhir (back)
- Setelah ditemukan, arahkan pointer next dari node back ke NULL dan bebaskan node terakhir (cursor).
Detele pada node tertentu
Contoh: Hapus node dengan data = 2
mynode remove_middle(mynode head, int nilai)
{
mynode cursor = head;
while (cursor != NULL)
{
if (cursor->next->value == nilai)
break; //keluar dari iterasi
cursor = cursor->next;
if (cursor != NULL)
{
mynode tmp = cursor->next;
cursor->next = tmp->next;
tmp->next = NULL;
free(tmp);
}
return;
}
Iterasi dari node head ke node terakhir (menggunakan cursor).
Sebelum free/membebaskan memory node yang ditunjuk cursor, buat dulu
temporary node tmp untuk menyimpan alamat node selanjutnya (karena jika node yang ditunjuk cursor sudah di-free-kan, alamat next-nya sudah tidak ada)
Detele Linked List (Dispose)
Penting untuk menghapus seluruh memory yang digunakan node-node pada linked list ketika sudah tidak digunakan/diperlukan
mynode dispose(mynode head)
{
mynode cursor, tmp;
if (head != NULL)
{
cursor = head->next;
head->next = NULL;
while (cursor != NULL)
{
tmp = cursor->next;
free(cursor);
cursor = tmp;
}
}
head = NULL;
return(head);
}
- Satu per satu menghapus node dari head ke terakhir. Iterasi dari node head ke node terakhir (menggunakan cursor).
- Sebelum free/membebaskan memory node yang ditunjuk cursor, buat dulu temporary node tmp untuk menyimpan alamat node selanjutnya (karena jika node yang ditunjuk cursor sudah di-free-kan, alamat next-nya sudah tidak ada).
- Setelah selesai iterasi, free-kan node head karena cursor dimulai dari head->next jadi head belum terbebaskan.
Materi Lengkap
Silakan baca juga beberapa artikel menarik kami tentang Single Linked List, daftar lengkapnya adalah sebagai berikut.