Membuat Double Linked List dengan Java

Pada postingan sebelumnya saya telah membahas bagaimana membuat single linked list dengan java. Nah, postingan kali ini saya akan membahas double linked list. Salah satu kelemahan dari single linked list adalah pointer hanya dapat bergerak satu arah saja, maju atau mundur, dan kiri atau kanan sehingga pencarian data pada single linked list hanya dapat bergerak dalam satu arah saja. Untuk mengatasi kelemahan tersebut, kita dapat menggunakan metode double linked list. 

Pada double linked list menggunakan dua pointer. Dengan memiliki dua buah pointer, maka double linked list dapat diakses dengan dua arah, depan dan belakang. 

Berikut gambaran dari double linked list :


Nah, selanjutnya adalah membuat double linked list dalam bahasa java. Berikut saya bagikan source codenya. Saya sarankan mengetik ulang source code di bawah ini daripada mencopas, supaya agan lebih paham.

Pertama buat kelas dengan nama Node

/**
*
* @author Wim Sonevel
*/
public class Node {
int data;
Node next;
Node prev;

public Node(int data){
this.data = data;
}

public void tampil(){
System.out.print("{"+data+"}");
}
}

Selanjutnya buat kelas dengan nama DoubleLinkedList. Kelas ini berisi method-method yang akan digunakan untuk mengoperasikan Double Linked List.

/**
*
* @author Wim Sonevel
*/
public class DoubleLinkedList {
Node first;
Node last;

//kontruktor
//set nilai awal adalah null
public DoubleLinkedList() {
first = null;
last = null;
}

//mengecek apakah linked list kosong atau tidak
public boolean isEmpty(){
return (first==null);
}

//method untuk menginsert data dari pertama
public void insertFirst(int data){
Node node = new Node(data);
if(isEmpty()){
last = node;
}else{
first.prev = node;
}

node.next = first;
first = node;
}

//method untuk menginsert data dari terakhir
public void insertLast(int data){
Node node = new Node(data);
if( isEmpty() )
first = node;
else{
last.next = node;
node.prev = last;
}
last = node;
}

//method untuk menginsert data pertama
public Node deleteFirst(){
Node temp = first;
if(first.next == null)
last = null;
else
first.next.prev = null;
first = first.next;
return temp;
}

//method untuk menghapus data terakhir
public Node deleteLast(){
Node temp = last;
if(first.next == null)
first = null;
else
last.prev.next = null;
last = last.prev;
return temp;
}

//method untuk menginsert data di tengah
public boolean insertAfter(int key, int data){
Node current = first;
while(current.data != key){
current = current.next;
if(current == null)
return false;
}
Node node = new Node(data);

if(current==last){
node.next = null;
last = node;
}else{
node.next = current.next;

current.next.prev = node;
}
node.prev = current;
current.next = node;
return true;
}

//method untuk menghapus data yang dipilih
public Node deleteKey(int key){
Node current = first;
while(current.data != key){
current = current.next;
if(current == null)
return null;
}
if(current==first)
first = current.next;
else
current.prev.next = current.next;
if(current==last)
last = current.prev;
else
current.next.prev = current.prev;
return current;
}

//menampilkan data dari pertama - terakhir
public void displayForward(){
System.out.print("List (first-->last): ");
Node current = first;

while(current != null){
current.tampil();
current = current.next;
}
System.out.println("");
}

//menampilkan data dari terakhir - pertama
public void displayBackward(){
System.out.print("List (last-->first): ");
Node current = last;
while(current != null){
current.tampil();
current = current.prev;
}
System.out.println("");
}
}

Setelah itu buat kelas dengan nama DoubleLinkedListApp. Kelas ini berfungsi untuk memanggil objek kelas DoubleLinkedList.

/**
*
* @author Wim Sonevel
*/
public class DoubleLinkedListApp {
public static void main(String[] args){
DoubleLinkedList theList = new DoubleLinkedList();
theList.insertFirst(22);
theList.insertFirst(44);
theList.insertFirst(66);
theList.insertLast(11);
theList.insertLast(33);
theList.insertLast(55);
theList.displayForward();
theList.displayBackward();
theList.deleteFirst();
theList.deleteLast();
theList.deleteKey(11);
theList.displayForward();
theList.insertAfter(22, 77);
theList.insertAfter(33, 88);
theList.displayForward();
}
}

Output :





Sekian dari saya, semoga bermanfaat.
Happy coding :)

Post a Comment

Previous Post Next Post