Link list adalah desain tempat penyimpanan data yang terdiri dari node-node (simpul-simpul) yang saling
terhubung.
Nodes adalah Self-referential objects (object yang mereferensikan dirinya sendiri) yang disebut nodes,
yang dihubungkan dengan links, membentuk kata “linked” list.
sekumpulan elemen bertipe sama, yang mempunyai keterurutan tertentu, yang setiap
elemennya terdiri dari dua bagian
struktur berupa rangkaian elemen saling berkait dimana setiap elemen dihubungkan elemen lain
melalui pointer. Pointer adalah alamat elemen. Penggunaan pointer untuk mengacu elemen
berakibat elemen-elemen bersebelahan secara logik walau tidak bersebelahan secara fisik di
memori.
Link list dapat diilustrasikan seperti kereta api, dimana kereta api terdiri dari gerbong-gerbong yang
saling terhubung yang dapat mengangkut penumpang. Gerbong disini setara dengan node dalam link list
yang berfungsi untuk menyimpan data.
Jika kita menyimpan data 3, 5 dan 7 dalam array, maka ilustrasi tempat penyimpanannya sbb:
Dengan 1 nama, array bisa menyimpan data yg bertipe sama. Dimana setiap data mempunyai indeks.
Sedangkan jika data tersebut disimpan dalam link list, maka ilustrasi tempat penyimpanannya sbb:
Pointer alamat penunjuk pada suatu node seringkali tidak tepat menunjuk ke node sebelum atau
sesudahnya (HUMAN ERROR).
Ketika membuat sebuah node, seringkali pointer alamat penunjuk ke node yang lain tidak
disertakan (hanya berisi data) sehingga list terputus pada node tersebut (HUMAN ERROR).
Perbedaan Linked List dan Array
Linked List adalah koleksi data item yang tersusun dalam sebuah barisan secara linear, dengan penyisipan dan
pemindahan dapat dilakukan dalam semua tempat di LL tersebut. Sedangkan Array adalah koleksi dari object yang
mempunyai tipe identik / sama, array dapat disebut juga koleksi data dengan setiap elemen data menggunakan
nama yang sama dan masing-masing elemen mempunyai tipe data sama. Array dapat diloop dengan memberi
indeks setiap item di dalamnya, dan setiap komponen / item array dapat diakses dan dibedakan melalui indeks
array.
~ Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai
kondisi berhenti saat pembacaan linked list.
Link list tidak mempunyai indeks seperti array. Kita hanya bisa memberi nama node. Akan tetapi, tidak
semua node dalam link list mempunyai nama. Sebaiknya kita memberi nama untuk node yang pertama
(misal namanya head), dan node yang terakhir (misal namanya tail). Tujuannya untuk memudahkan
operasi link list dari depan atau belakang, misal nambah data atau menghapus data.
Langkah yang pertama, kita harus mendefinisikan apa itu node. Dalam Java, sebaiknya
pendefinisian node ini dibuat dalam sebuah class, misal:
Kemudian kita buat design link list dalam class yang lain, misal:
Pemodelan Operasi dasar Link List
a. insertAtFront
b. insertAtBack
Metode removeFromFront memindahkan node pertama list dan mengembalikan (memberikan) sebuah
referensi untuk memindahkan data. Metode ini melakukanEmptyListException jika list dalam keadaan
kosong ketika program memanggil metode ini.
d. removeFromBack
Metode removeFromBack memindahkan node terakhir list dan mengembalikan (memberikan) sebuah
referensi untuk memindahkan data. Metode ini melakukan EmptyListException jika list dalam keadaan
kosong ketika program memanggil metode ini.
Operasi-operasi yang bisa dilakukan dalam link list yaitu:
Tambah Depan
Tambah Belakang
Hapus Belakang
Contoh 1 :
class IntNode{
public int data;
public IntNode next;
}
public class Linked_List4 {
public static void main(String[] args){
IntNode depan = new IntNode(10,null);
System.out.println(depan);
StrNode depan1= new StrNode("wow",null);
System.out.println(depan1);
}
Contoh 2 :
import java.util.*;
public class Linked_List3 {
public static void main(String[] args) {
System.out.println("LinkedList");
LinkedList List=new LinkedList();
int a=3, b=5, c=9, d=11;
int size;
List.add(a);
List.add(b);
List.add(c);
List.add(d);
System.out.print("Sebelum di insert"+List);
System.out.print("\n insert 7");
int e=7;
List.add(2, e);
System.out.println("\nsetelah di urutkan"+List);
}
}
Contoh 3 :
class Node2{
int data;
Node2 next;
}
class LinkedList1{
Node2 head; //posisi awal dari linked list
Node2 tail; //posisi akhir dari linked list
/**
* Fungsi untuk mengecek apakah linked list masih kosong
*/
boolean isEmpty(){
return (head==null);
}
void removeFirst(){
Node2 temp = head;
if (!isEmpty()){
if (head == tail){ //jika element linked list hanya 1,
head = tail = null; //maka head dan tail menjadi null
} //sehingga linked list kosong
else {
temp = temp.next; //memajukan temp ke temp.next
head = temp; //kemudian head dipindah ke temp
temp = null; //kemudian temp di-null (optional)
}
}
else System.out.println("Data is empty!");
}
void removeLast(){
Node2 temp = head;
if (!isEmpty()){
if (tail == head){ //jika element linked list hanya 1
head = tail = null; //maka head dan tail menjadi null
} //sehingga linked list kosong
else {
while (temp.next != tail){
temp = temp.next; //memajukan temp hingga satu elemen
} //sebelum tail.
temp.next = null; //temp.next di-null,dan jadi akhir LL
tail = temp; //tail dipindah ke temp
temp = null;
}
}
else System.out.println("Data is empty!");
}
void printNode(){
Node2 temp;
temp = head;
while (temp != null){
System.out.println(temp.data);
temp = temp.next;
}
}
}
public class Linked_List6 {
public static void main(String[] args){
Node2 satu = new Node2();
satu.data=10;
LinkedList1 a = new LinkedList1();
a.addFirst(satu);
a.find(10);
a.addLast(dua);
a.printNode();
a.removeLast();
a.printNode();
}
}
STRUKTUR DATA
SINGLE LINKED LIST
KELOMPOK 1 :
Titiyanti R H13114323
Murniati H13114511