Double linked list Link list yang kita pelajari sebelumnya hanya mempunyai sebuah pointer pada setiap simpulnya. Hal ini merupakan kelemahan bahwa link list tersebut hanya bisa dibaca dalam satu arah saja, yaitu dari kiri ke kanan. Hal yang seperti ini kurang cepat jika kita ingin mencari data di dalam link list Untuk itulah kita memerlukan link list yang setiap simpulnya mempunyai 2 buah pointer, dengan pointer pertama menunjuk ke simpul sebelumnya (sebelah kiri) dan pointer kedua menunjuk ke simpul sesudahnya (disebelah kanan). Hal ini akan mempermudah pembacaan (bisa dilakukan dari kiri ke kanan dan dari kanan ke kiri), begitu juga untuk penambahan simpul dan penghapusan simpul. Link list seperti ini disebut dengan Seranai eranai Ganda (Double linked list). Juga disebut dengan Two Way List Secara garis besar Double link list adalah link list yang memiliki dua buah pointer yang menunjuk ke simpul sebelumnya (Prev) dan yang menunjuk ke simpul sesudahnya (Next). Gambar berikut menunjukkan gambaran Double Link list C D Gambar 1. Double linket list dengan empat simpul Deklarasi Double Linked List di dalam Pascal : Type Var PSimpul =^Simpul Simpul = Record Info : char; Prev : PSimpul; Next : PSimpul; Head, Tail : PSimpul; da beberapa hal yang harus diketahui mengenai Double link list, diantaranya adalah : 1. Double Link list selalu memiliki pointer petunjuk yang selalu menunjuk pada awal dari list yang disebut Head 2. Double Link list juga selalu memiliki pointer petunjuk menunjuk pada akhir dari list yang disebut Tail.
3. Setiap simpul yang terbentuk selalu memiliki nilai NIL, kecuali jika simpul tersebut sudah ditunjuk oleh simpul yang lainnya (Double Link list belum terhubung). 4. Posisi simpul terakhir pada Doube link list selalu bernilai NIL karena ia tidak menunjuk pada simpul yang lainnya, kecuali bentuk circular. 5. Operasi yang dapat dilakukan pada DoubleLink list diantaranya adalah : a. Inisialisasi. b. Menambah Simpul (di Depan, elakang dan Tengah). c. Menghapus Simpul (di Depan, elakang dan Tengah). d. Membaca isi link list. 1. Membuat Simpul aru Untuk membuat node digunakan keyword new. Perintah ini digunakan untuk mempersiapkan sebuah node dengan alokasi memorinya. Selanjutnya medan informasi pada node tersebut diisi dengan data tertentu. Terakhir pointer dan diisi dengan NILL. New(aru); aru^.info := Elemen; aru^.next := Nil; aru^.prev := Nil; 2. Menambah Simpul di wal Penambahan node yang akan diletakkan di node paling depan, perlu diperhatikan saat pertama kali (data masih kosong), maka saat penambahan data dilakukan / ditunjukkan ke node tersebut. Sedangkan jika tidak kosong, data akan ditambahkan didepan, kemudian node akan berubah menjadi.
Procedure TDep(Var Head, Tail : PSimpul; Elemen : Char); Var aru : PSimpul; egin New(aru); aru^.info := Elemen; aru^.next := Nil; aru^.prev := Nil; if = nil then := ; := aru^.next := Head; Head^.Prev := aru; Head := aru 3. Menambah Simpul di elakang Penambahan node di belakang akan selalu dikaitkan dengan dan kemudian node tersebut akan menjadi.
Procedure Tel(Var Head, Tail : PSimpul; Elemen : Char); Var aru : PSimpul; egin New(aru); aru^.info := Elemen; aru^.next := Nil; aru^.prev := Nil; if = nil then := ; := Tail^.Next := aru; aru^. := Tail; Tail := aru 4. Menghapus Simpul di wal Menghapus node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus dilakukan penggunakan suatu pointer lain yang digunakan untuk menunjuk node yang akan dihapus, misalnya pointer hapus. Kemudian harus ditunjukkan ke node sesudahnya terlebih dahulu agar list tidak putus, sehingga node setelah lama akan menjadi. Setelah itu lah kemudian menghapus pointer hapus dengan menggunakan perintah delete. Jika masih NIL maka berarti data masih kosong!
C D hapus C D Procedure HDepan(Var Head, Tail : PSimpul); Var Hapus : PSimpul; egin if = nil then Write('List Kosong') if Head^.Next = Nil Then Hapus := Head; Head := Nil; Tail := Nil; Dispose(Hapus) egin Hapus := Head; Head := Hapus^.Next; Head^.Prev := Nil; Dispose(Hapus); End 5. Menghapus Simpul di elakang Menghapus simpul di belakang dibutuhkan satu buah pointer bantuan, misal pointer hapus, tidak perlu melakukan perulangan untuk mencari node terakhir seperti pada single linked list. Pointer hapus hanya perlu menunjuk pada pointer saja. Sebelum penghapusan node, harus dipindahkan pada node sebelumnya. Selanjutnya pointer dari diberi nilai NILL. Kemudian langkah terakhir simpul hapus di-delete
C D hapus C Procedure Hel(Var Head, Tail : PSimpul); Var Hapus : PSimpul; egin if = nil then Write('List Kosong') if Head^.Next = Nil Then Hapus := Head; Head := Nil; Tail := Nil; Dispose(Hapus) egin Hapus := Tail; Tail := Hapus^.Prev; Tail^.Next := Nil; Dispose(Hapus); End