Skip to content
14 Februari 2009 / Jeffrey Hermanto Halimsetiawan

Linked List dalam Bahasa Java


Download PDF Version : Linked List dalam Bahasa Java – tutorialpemrograman.wordpress.com

Singly Linked List :

~ Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data.

~ Akhir linked list ditandai dengan node terakhir akan menunjuk ke null yang akan digunakan sebagai kondisi berhenti saat pembacaan linked list.

Single Linked List Non Circular

Singly Linked List Non Circular

Doubly Linked List :

~ Linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu: 1 field pointer yang menunjuk ke pointer berikutnya, 1 field pointer yang menunjuk ke pointer sebelumnya dan field yang berisi data dari node tersebut.

~ Pointer next dan prev-nya menunjuk ke null.

Doubly Linked List

Doubly Linked List

Singly Circular Linked List :

~ Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri, jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.

Singly Circular Linked List

Singly Circular Linked List

Double Circular Linked List :

~ Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.

Doubly Circular Linked List

Doubly Circular Linked List


Implementasi Class Single Linked List beserta Methodnya :


class Node{
	int data;
 	Node next;
}

class LinkedList{
 	Node head;	//posisi awal dari linked list
 	Node tail;	//posisi akhir dari linked list
 	/**
 	 * Fungsi untuk mengecek apakah linked list masih kosong
 	 */
 	boolean isEmpty(){
  		return (head==null);
 	}

 	void addFirst(Node input){
  		if (isEmpty()){	//Jika linked list masih kosong,
   			head = input;	//maka head dan tail sama dengan node input
   			tail = input;
  		}
  		else {
   			input.next = head;	//Jika linked list sudah berisi,
   			head = input;	//maka input akan di depan dan menjadi head
  		}
 	}

	void addLast(Node input){
		if (isEmpty()){	//Jika linked list masih kosong,
			head = input;	//maka head dan tail sama dengan node input
			tail = input;
		}
		else {
			tail.next = input;	//Jika linked list sudah berisi,
			tail = input;	//maka input akan di belakang dan menjadi tail
		}
	}

	void insertAfter(int key,Node input){
  		Node temp = head;
  		do {
   			if (temp.data == key){	//Jika data sama dengan key, maka input
   				input.next = temp.next; //disambung diantara temp dan temp.next
   				temp.next = input;
   				System.out.println("Insert data is succeed.");
   				break;	//dari temp --> temp.next menjadi :
   			}			//temp --> input --> temp.next
   			temp = temp.next;
  		}
  		while (temp!=null);
 	}

 	void insertBefore(int key,Node input){
 		Node temp = head;
 		while (temp != null){
 			if ((temp.data == key)&&(temp == head)){
 				this.addFirst(input);	/* jika insert pada awal linked list
 							maka call method addFirst */
 				System.out.println("Insert data is succeed.");
 				break;
 			}
 			else if (temp.next.data == key){
 				input.next = temp.next;	//dari temp --> temp.next menjadi
 				temp.next = input;			//temp --> input --> temp.next
 				System.out.println("Insert data is succeed.");
 				break;
 			}
 			temp = temp.next;
 		}
 	}

 	void removeFirst(){
  		Node 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(){
  		Node 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 remove(int key){
 		Node temp = head;
 		if (!isEmpty()){
 			while (temp != null){
 				if (temp.next.data == key){	//mengganti temp.next dengan
 					temp.next = temp.next.next; //temp.next.next
 					break;	//dari temp --> temp.next -->temp.next.next
 				}			//menjadi temp --> temp.next.next
 				else if ((temp.data == key)&&(temp == head)){
 					this.removeFirst();//jika key berada pada awal linked list,
 					break;		//maka call method removeFirst
 				}
 				temp = temp.next;
 			}
 		} else System.out.println("Data is empty!");
 	}

 	void find (int key){
  		int i = 0;
  		boolean found = false;
  		Node temp = head;
  		while (temp != null){
   			if (temp.data == key){
    			found = true;
    			break;
   			}
   			i++;
   			temp = temp.next;
  		}
  		if (found){
   			System.out.println(key+" is found at index "+i);
  		}
  		else System.out.println("Data isn't found");
 	}

 	void printNode(){
  		Node temp;
  		temp = head;
  		while (temp != null){
   			System.out.println(temp.data);
   			temp = temp.next;
  		}
 	}
}
  1. limpat / Feb 28 2009 21:24

    trus dalam java String[] args dalam parameter method main fungsinya apa?
    kalau dihilangkan kok tidak bisa

    • Jeffrey Hermanto / Mar 1 2009 12:04

      itu gunanya klo kita mau menjalankan program java dari command prompt dengan langsung memasukkan argumen2 sebagain input..

      Contohnya di command prompt:
      java pertambahan 5 3

      di C pun sebenarnya jg bisa tp jarang dipakai..
      yang biasanya digunakan hanya
      int main(){

      }
      tp ada jg yang seperti ini:
      int main(int argc, char *args){

      }

  2. limpat / Feb 28 2009 21:32

    bagus mas setiap mau keluar modul baru praktikum upload tutorialnya mas sangat membantu

    Terima Kasih

    • Jeffrey Hermanto / Mar 1 2009 12:06

      ok2 sep..
      sama2..
      tp jgn lngsung d-copy paste lo..
      dipahami dl..
      gambarnya jg dgambar sendiri aja buat pertanyaan soal wajib, biar lbh paham..
      jgn dcopy paste :p

  3. tQUe Kudo / Mar 3 2009 13:21

    makasih, mas jeffrey,,,,,

    • Jeffrey Hermanto / Mar 4 2009 17:09

      o y, sama2..

  4. tQUe Kudo / Mar 3 2009 13:24

    mas, saya itu klo baca teori ttg linked list,, lumayan ngerti,,
    tp ntar klo disuruh ngoding,,
    bingung puol, wes,,,

    mas, di 1 file .java itu boleh ada beberapa class ndak??
    klo di contoh2 di internet, biasanya 1 .java cuman ada 1 class

    makasih, mas….

    • Jeffrey Hermanto / Mar 4 2009 17:12

      lo yg penting konsep-nya ngerti aja pasti bisa..
      konsep operasi2 linked list ky addLast, addFirst, removeFirst, removeLast, insertAfter, insertBefore itu jgn dhafalin codingannya tp dmengerti konsep nya…
      pasti bsa kq..

      di 1 file .java boleh bnyak class kq..
      tp lbih baek 1 .java cman 1 class biar lbih teratur n gampang cari error2nya..
      ok2 sep..

  5. Mnemonic Suryono / Mei 26 2009 01:31

    wah om dikasih taggoff lebih asyik nih, jadi lebih bisa memahami codingnya??
    walau tugas bahasa c tapi lihat alur program dari tagoffnya jadi agak mudeng gimana linked list…
    moga2 mudeng di convert ke C.
    hohoho.
    anyway thans berat maju terus open source code..hahaha….

    • Jeffrey Hermanto / Jun 3 2009 13:47

      o y, tagoff memang sengaja dkasi supaya yg membacanya cpt ngerti mksd codingannya..

      o y sama2..
      semoga bermanfaat..😀

  6. adhit / Nov 3 2009 13:34

    mas variabel key pada method insert before and insert after itu buat pa??

    kan klo input , buat data yg d inputkan..

    mksh sblmnya ya mas..

    • Jeffrey Hermanto / Nov 3 2009 21:49

      itu maksudnya, datanya akan diinputkan setelah atau sebelum node yang mengandung angka yang sama dengan variable key tersebut..

      sama2..😀

      • adhit / Nov 4 2009 10:42

        sry mas masih blm ngerTI..

        for (int i = 0; i < args.length; i++) {
        int data = (int)(Math.random()*100);
        ling.tambahSebelum(???, data);
        System.out.println("Tambah data: " + data);
        }

        q pke ini buat implementasi method tambahSebeLum bisa gk ?? trs yg "???" q isi dengan parameter apa??

        maaf merepotkan.. Hehehe ^_^

      • Jeffrey Hermanto / Nov 6 2009 14:35

        y silahkan kamu isi var data yang berisi angka hasil random itu mau diletakkan di sebelum node yang mengandung angka berapa gt..
        semoga bermanfaat😀

  7. dimas / Jan 5 2010 15:01

    mas minta contoh gambar double linkedlist yang edit tp ya…

    • Jeffrey Hermanto / Jan 16 2010 21:21

      y silahkan😀

  8. afin / Jan 8 2010 20:57

    mohon himbauannya:
    saya ingin menanyakkan untuk coding pembuatan linked list keranjang belanja gmn y? yang bila item dlm menu di apus,item itu muncul kembali dalam kata delete item pada tampilan menu java..
    lebih jelasnya seperti pada contoh ini:
    public class LinkList {
    public static void main(String[] args) {

    DaftarBelanja keretaBelanja = new DaftarBelanja();
    //masukkanItem(String namaBarang, int harga, int index)
    keretaBelanja.masukkanItem(“Tempe”, 2000, 1);
    keretaBelanja.masukkanItem(“Tahu”, 2000, 2);
    keretaBelanja.masukkanItem(“Bacem”, 3000, 3);
    keretaBelanja.masukkanItem(“Daging”, 8000, 4);
    keretaBelanja.masukkanItem(“Ayam”, 7000, 5);

    System.out.println(“Index\t” + “Nama Barang\t” + “Harga\t”);
    System.out.println(“=============================”);
    keretaBelanja.displayList();
    System.out.println(“=============================”);
    System.out.println(“Total Belanja : Rp ” + keretaBelanja.totalBelanjaan());

    //Rekam data nomer tiga dihapus
    System.out.println(“”);
    Belanjaan d = keretaBelanja.delete(3);
    if (d != null)
    System.out.println(“Rekam nomer : ” + d.index +” telah dihapus”);
    else
    System.out.println(“Tautan tidak bisa dihapus”);
    System.out.println(“”);

    //Cetak ulang daftar belanja
    System.out.println(“Index\t” + “Nama Barang\t” + “Harga\t”);
    System.out.println(“=============================”);
    keretaBelanja.displayList();
    System.out.println(“=============================”);
    System.out.println(“Total Belanja : Rp ” + keretaBelanja.totalBelanjaan());
    }
    }

    menghasilkan keluaran seperti ini
    Index Nama Barang Harga
    =============================
    5 Ayam 7000
    4 Daging 8000
    3 Bacem 3000
    2 Tahu 2000
    1 Tempe 2000
    =============================
    Total Belanja : Rp 22000

    Rekam nomer : 3 telah dihapus

    Index Nama Barang Harga
    =============================
    5 Ayam 7000
    4 Daging 8000
    2 Tahu 2000
    1 Tempe 2000
    =============================
    Total Belanja : Rp 19000

    saya sangat membutuhkan pencerahanya..
    terima kasih..

    • Jeffrey Hermanto / Feb 7 2010 13:09

      untuk pembuatan linked list keranjang belanja hanya perlu melakukan sedikit modifikasi pada class Node nya

      
      class Node {
          int index;
          String nama;
          int harga;
          Node next;
      }
      

      seperti itu, dan untuk penghapusan item sesuai indeksnya berarti kita harus melakukan pengecekan pada atribut index, jika nilai indexnya sesuai dengan nilai index yang akan dihapus maka Node tersebut dihapus..
      semoga bermanfaat😀

      – practice makes perfect –

  9. ardi / Des 5 2011 15:59

    Mas! thanks before!
    kalo bisa kasih tutorial video nya donk biar bisa mengerti bgt dan paham banget

    • Jeffrey Hermanto Halimsetiawan / Des 8 2011 13:17

      thanks! semoga bermanfaat!

Trackbacks

  1. [Pola dan Arsitektur Perangkat Lunak] Decorator Pattern « Tutorial Pemrograman Komputer Sederhana

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: