fbpx

Struktur Data : Operasi Menghapus Node Pada Single Linked List Bahasa C

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.


Tonton juga video pilihan dari kami berikut ini

Bagikan ke teman-teman Anda

Contact Us

How to whitelist website on AdBlocker?

How to whitelist website on AdBlocker?

  1. 1 Click on the AdBlock Plus icon on the top right corner of your browser
  2. 2 Click on "Enabled on this site" from the AdBlock Plus option
  3. 3 Refresh the page and start browsing the site
error: Content is protected !!
Up