Toko elektronik menjaga urutan perbaikan barang: unit yang datang lebih dulu dikerjakan lebih dulu. Suatu saat, satu unit harus disisipkan di tengah antrean karena garansi prioritas, dan satu unit dikeluarkan dari tengah antrean. Pada List, penyisipan di tengah memaksa elemen setelahnya bergeser satu per satu. LinkedList menyelesaikan penyisipan semacam ini tanpa pergeseran, karena itemnya disimpan sebagai node yang saling terhubung.

Rantai Node dengan Dua Arah #

Setiap elemen LinkedList<T> berupa objek LinkedListNode<T> yang menyimpan nilai beserta dua penunjuk: Next ke node berikutnya dan Previous ke node sebelumnya. Penyisipan cukup menghubungkan ulang penunjuk di sekitar posisi target, tanpa memindahkan node lain. Konsekuensinya, LinkedList tidak memiliki indexer: mencapai posisi tertentu hanya bisa dengan menelusuri rantai dari ujung.

csharp
LinkedList<string> antrianPerbaikan = new LinkedList<string>();

antrianPerbaikan.AddLast("Laptop");
antrianPerbaikan.AddLast("Printer");
antrianPerbaikan.AddLast("Proyektor");

LinkedListNode<string> nodePrinter = antrianPerbaikan.Find("Printer");
antrianPerbaikan.AddAfter(nodePrinter, "Kamera");

Console.WriteLine($"Jumlah unit: {antrianPerbaikan.Count}");
Console.WriteLine($"Paling awal: {antrianPerbaikan.First.Value}");
Console.WriteLine($"Paling akhir: {antrianPerbaikan.Last.Value}");

LinkedListNode<string> node = antrianPerbaikan.First;
while (node != null)
{
    Console.WriteLine($"- {node.Value}");
    node = node.Next;
}

Output yang Dihasilkan:

text
Jumlah unit: 4
Paling awal: Laptop
Paling akhir: Proyektor
- Laptop
- Printer
- Kamera
- Proyektor

Mari kita telaah baris demi baris:

  1. Baris 3-5 (antrianPerbaikan.AddLast(...)): Tiga unit masuk dari ujung belakang; urutan rantai menjadi Laptop → Printer → Proyektor.
  2. Baris 7 (antrianPerbaikan.Find("Printer")): Method Find menelusuri rantai dan mengembalikan node yang bernilai "Printer".
  3. Baris 8 (antrianPerbaikan.AddAfter(nodePrinter, "Kamera")): Node baru disisipkan tepat setelah node Printer; hanya penunjuk yang dihubungkan ulang, tidak ada elemen yang bergeser.
  4. Baris 10-12: Count, First, dan Last memberi akses cepat ke jumlah node serta kedua ujung rantai.
  5. Baris 14-19: Perulangan berjalan dari First; setiap iterasi mencetak node.Value lalu melangkah ke node.Next hingga penunjuk bernilai null.

Kapan LinkedList Tepat Dipakai #

LinkedList unggul saat program sering menyisipkan atau menghapus item di posisi tengah dengan referensi node yang sudah diketahui. Sebaliknya, LinkedList kurang cocok untuk akses acak berdasarkan posisi; jika program lebih sering membaca elemen ke-N, List tetap pilihan yang lebih sederhana dan lebih cepat.