{"id":448,"date":"2020-04-03T16:49:51","date_gmt":"2020-04-03T16:49:51","guid":{"rendered":"https:\/\/unydevelopernetwork.com\/?p=448"},"modified":"2020-04-03T16:50:13","modified_gmt":"2020-04-03T16:50:13","slug":"tutorial-struktur-data-implementasi-single-linked-list-sederhana-dengan-java","status":"publish","type":"post","link":"https:\/\/unydevelopernetwork.com\/index.php\/2020\/04\/03\/tutorial-struktur-data-implementasi-single-linked-list-sederhana-dengan-java\/","title":{"rendered":"Tutorial: (Struktur Data) Implementasi Single Linked List sederhana dengan Java"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>\n<p>Selamat datang di blogs UNYDeveloperNetwork. Sebagai anak informatika atau anak <em>computer science<\/em> atau ilkom, yang masih <em>beginner <\/em>ataupun yang sudah <em>expert<\/em> pasti mengenal istilah <em>Single Linked List<\/em> (atau umumnya hanya disebut <em>Linked List<\/em> saja). Biasanya topik ini disampaikan pada mata perkuliahan struktur yang nanti diikuti oleh <em>Double Linked List<\/em> dan <em>Circular Linked List. <\/em>Kedua topik tersebut juga dibahas pada blogs ini. Namun, khusus pada artikel ini, Saya akan secara khusus membahas apa itu <em>Linked List<\/em> dan implementasi secara sederhana dengan menggunakan Bahasa pemrograman Java.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Apakah itu <em>Single<\/em> <em>Linked List<\/em>?<\/h2>\n\n\n\n<p>Dalam ilmu komputer, <em>linked list<\/em> dapat didefinisikan sebagai koleksi linear dari elemen &#8211; elemen data.  Penempatan elemen &#8211; elemen data ini acak di dalam memori, namun antar elemen data ini terhubung dengan node. Jadi satu node dalam suatu elemen data akan menunjuk ke node elemen data lain melalui suatu penunjuk yang umumnya disebut <em>pointer<\/em>.  Jadi dapat disimpulkan, sebuah koleksi data disebut sebagai <em>Linked List<\/em> apabila antar data tersebut nodenya saling terhubung melalui pointer. <\/p>\n\n\n\n<p>Lantas, apakah itu <em>Single Linked List<\/em>? Sesuai penjelasan pada paragraf sebelumnya, antar elemen data terhubung nodenya melalui pointer. Nah, pointer inilah yang menentukan sebuah <em>Linked List <\/em>apakah itu <em>Single, Double, Circular, atau Double Circular<\/em>. Sebuah <em>Linked List<\/em> dikatakan sebagai  <em>single <\/em>apabila dua node hanya terhubung dengan satu pointer saja (entah itu pointer maju ataupun mundur). Jika, dua node terhubung dengan dua pointer (bolak balik) maka disebut <em>Double<\/em>. Apabila node <em>first<\/em> dan <em>last <\/em>nya saling terhubung dan hanya dihubungkan dengan satu pointer maka disebut <em>single circular<\/em>. Terakhir, apabila node <em>first<\/em> dan <em>last <\/em>nya terhubung dengan dua pointer (bolak balik) maka disebut <em>double circular<\/em>.<\/p>\n\n\n\n<p>Secara sederhana berikut penjelasan melalui gambar.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"355\" height=\"331\" src=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-12.png\" alt=\"\" class=\"wp-image-450\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-12.png 355w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-12-300x280.png 300w\" sizes=\"auto, (max-width: 355px) 100vw, 355px\" \/><figcaption>Sebuah Node lengkap dengan elemen data dan pointernya<\/figcaption><\/figure><\/div>\n\n\n\n<p>Kemudian contoh dari <em>Single Linked List<\/em> adalah sebagai berikut.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"943\" height=\"160\" src=\"https:\/\/i0.wp.com\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-15.png?fit=640%2C109&amp;ssl=1\" alt=\"\" class=\"wp-image-453\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-15.png 943w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-15-300x51.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-15-700x119.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-15-768x130.png 768w\" sizes=\"auto, (max-width: 943px) 100vw, 943px\" \/><\/figure><\/div>\n\n\n\n<p>Dapat kita lihat dari gambar di atas, masing &#8211; masing node dihubungkan oleh satu pointer. Sedangkan pada pointer node terakhir tidak menunjuk ke mana &#8211; mana alias <strong>null<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Operasi &#8211; operasi pada <em>Single Linked List<\/em><\/h2>\n\n\n\n<p>Pada <em>single linked list<\/em> secara umum dikenal dua operasi, yakni operasi<strong> <\/strong><em>push <\/em>dan <em>pop<\/em>. Operasi <em>push<\/em> adalah operasi yang menambahkan data pada <em>list<\/em>, sedangkan operasi <em>pop<\/em> adalah operasi yang menghapus data dari <em>list<\/em>. Untuk operasi <em>push<\/em> secara umum dapat dilakukan secara <em>first<\/em> yang menambahkan data pada <em>head<\/em> dan secara <em>last<\/em> yang menambahkan data pada <em>tail<\/em>. Sedangkan <em>pop<\/em> juga sama, dapat dilakukan secara <em>first<\/em> yang menghapus data pada <em>head<\/em> dan secara <em>last<\/em> yang menghapus data pada <em>tail<\/em>. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1087\" height=\"414\" src=\"https:\/\/i1.wp.com\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-17.png?fit=640%2C244&amp;ssl=1\" alt=\"\" class=\"wp-image-455\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-17.png 1087w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-17-300x114.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-17-700x267.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-17-768x293.png 768w\" sizes=\"auto, (max-width: 1087px) 100vw, 1087px\" \/><figcaption>Penggambaran push secara sederhana pada <em>head<\/em><\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1084\" height=\"447\" src=\"https:\/\/i1.wp.com\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-19.png?fit=640%2C264&amp;ssl=1\" alt=\"\" class=\"wp-image-457\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-19.png 1084w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-19-300x124.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-19-700x289.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-19-768x317.png 768w\" sizes=\"auto, (max-width: 1084px) 100vw, 1084px\" \/><figcaption>Penggambaran push secara sederhana pada <em>tail<\/em><\/figcaption><\/figure><\/div>\n\n\n\n<p>Dari kedua gambar di atas dapat kita lihat bahwa letak \/ posisi data yang di <em>push<\/em> tidak selalu pada satu tempat (memory) yang sama. Karena prinsip pada <em>Linked List<\/em> adalah tidak memandang data itu berada, selama antar data itu masih terhubung, maka data yang saling terhubung tersebut masih dalam satu <em>sequence<\/em>. Oleh karenanya, penggambaran <em>push<\/em> node baru ke dalam <em>list<\/em> dapat diperlihatkan dengan menghubungkan data yang letak \/ posisinya berbeda. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"961\" height=\"523\" src=\"https:\/\/i0.wp.com\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-20.png?fit=640%2C348&amp;ssl=1\" alt=\"\" class=\"wp-image-458\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-20.png 961w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-20-300x163.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-20-700x381.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-20-768x418.png 768w\" sizes=\"auto, (max-width: 961px) 100vw, 961px\" \/><figcaption>Penggambaran push pada index-N list secara sederhana<\/figcaption><\/figure><\/div>\n\n\n\n<p>Untuk operasi <em>push<\/em> yang melibatkan <em>head<\/em> dan <em>tail<\/em> itu sangat sederhana. Karena pada <em>head<\/em> nodenya belum ditunjuk <em>pointer<\/em> apapun, sedangkan pada <em>tail<\/em>, <em>pointernya<\/em> menunjuk pada <em>NULL<\/em>. Oleh karenanya operasi <em>push<\/em> pada <em>head <\/em>dan <em>tail <\/em>sangat sederhana. Berbeda sekali dengan operasi <em>push<\/em> pada index-N. Operasi <em>push<\/em> yang dilakukan pada index-N melibatkan dua aksi, yang pertama adalah memutus pointer dari node index-(N-1) ke node index-(N+1);  kemudian menghubungkan pointer dari node index-(N-1) ke node index-N; dan dilanjutkan dengan menghubungkan pointer dari node index-N ke node index-(N+1). Proses ini disebut juga dengan <em>insertion<\/em> atau proses menyisipkan data ke dalam <em>list<\/em>.<\/p>\n\n\n\n<p>Lalu bagaimanakah dengan operasi <em>pop<\/em>? Operasinya hampir sama dengan <em>push<\/em> dan bahkan hanya merupakan kebalikan dari operasi <em>push<\/em>. Berikut adalah penggambarannya.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1091\" height=\"423\" src=\"https:\/\/i0.wp.com\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-22.png?fit=640%2C248&amp;ssl=1\" alt=\"\" class=\"wp-image-460\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-22.png 1091w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-22-300x116.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-22-700x271.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-22-768x298.png 768w\" sizes=\"auto, (max-width: 1091px) 100vw, 1091px\" \/><figcaption>Penggambaran <em>pop<\/em> secara sederhana pada <em>head<\/em><\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1090\" height=\"423\" src=\"https:\/\/i0.wp.com\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-23.png?fit=640%2C249&amp;ssl=1\" alt=\"\" class=\"wp-image-461\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-23.png 1090w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-23-300x116.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-23-700x272.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-23-768x298.png 768w\" sizes=\"auto, (max-width: 1090px) 100vw, 1090px\" \/><figcaption>Penggambaran <em>pop<\/em> secara sederhana pada <em>tail<\/em><\/figcaption><\/figure><\/div>\n\n\n\n<p>Hampir sama dengan <em>push<\/em>, pada kedua <em>pop <\/em>di atas (<em>head &amp; tail<\/em>)  dapat kita lihat bahwa proses <em>pop <\/em>dilakukan hanya dengan memutus pointer yang menunjuk. Untuk <em>pop<\/em> pada <em>head<\/em>, pointer yang menunjuk ke node <em>next<\/em> diputus dan menjadikan node <em>next<\/em> menjadi <em>head<\/em>. Begitu pula dengan <em>pop<\/em> pada tail, node <em>prev<\/em> memutuskan pointer yang menunjuk ke node <em>next<\/em> (yang dalam hal ini adalah <em>tail<\/em>) dan membuat pointernya tidak menunjuk apa apa alias NULL. Hal ini menjadikan node <em>prev<\/em> menjadi <em>tail<\/em>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1092\" height=\"423\" src=\"https:\/\/i1.wp.com\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-24.png?fit=640%2C248&amp;ssl=1\" alt=\"\" class=\"wp-image-462\" srcset=\"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-24.png 1092w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-24-300x116.png 300w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-24-700x271.png 700w, https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-24-768x297.png 768w\" sizes=\"auto, (max-width: 1092px) 100vw, 1092px\" \/><figcaption>Penggambaran <em>pop<\/em> secara sederhana pada index-N<\/figcaption><\/figure><\/div>\n\n\n\n<p>Untuk <em>pop <\/em>pada index-N prosesnya agak sedikit berbeda. Karena pada kasus ini, seluruh node sudah terhubung dan satu node dipaksa untuk memisahkan diri. Oleh karena itu, untuk <em>pop<\/em> pada index-N, kali pertama pointer node index-(N-1) memutuskan hubungan terlebih dahulu dengan node index-N. Pointer node index-(N-1) dalam hal ini sudah tidak lagi menunjuk node index-N. Pointer node index-(N-1) kemudian melanjutkannya dengan menunjuk node index-(N+1) yang mana sudah sudah ditunjuk terlebih dahulu oleh pointer node index-N. Oleh karenanya, pointer node index-N pun melepaskan diri dari node index-(N+1) dengan tidak lagi menunjukkan. Dengan demikian node index-N sudah keluar dari <em>list<\/em>.<\/p>\n\n\n\n<p>Demikianlah penjelasan singkat mengenai operasi &#8211; operasi pada <em>Single Linked List<\/em>. Selanjutnya, mari kita beralih ke bagian berikutnya. Implementasi <em>Single Linked List<\/em> dengan menggunakan bahasa pemrograman Java.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementasi <em>Single Linked List<\/em> dengan Menggunakan Java<\/h2>\n\n\n\n<p>Untuk implementasi <em>Single Linked List <\/em>dengan menggunakan Java, Saya buat agak panjang. Hal ini bertujuan supaya Anda dapat memahami proses logika dari <em>Single Linked List<\/em> dengan menggunakan bahasa pemrograman Java. Mari kita mulai.<\/p>\n\n\n\n<p><strong>Pertama, <\/strong>buatlah class dengan nama <em>JavaLinkedList<\/em> lengkap dengan main methodnya.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public class JavaLinkedList {\n     public static void main(String&#91;] args){\n     }\n}<\/code><\/pre>\n\n\n\n<p><strong>Kedua, <\/strong>import komponen &#8211; komponen yang dibutuhkan.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.util.LinkedList;\nimport java.util.Scanner;\nimport java.util.InputMismatchException;<\/code><\/pre>\n\n\n\n<p>Ada 3 komponen yang dibutuhkan dalam program ini. Yang pertama adalah <em>Linked<\/em> <em>List<\/em> itu sendiri, <em>Scanner<\/em> yang berfungsi untuk menerima masukan, dan <em>InputMismatchException<\/em> yang berfungsi untuk menghandle kesalahan masukan (validasi masukan).<\/p>\n\n\n\n<p><strong>Ketiga, <\/strong>buatlah satu object dengan jenis <em>Linked List<\/em> dan tipe data String.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static LinkedList&lt;String> dataStorage = new LinkedList&lt;String>();<\/code><\/pre>\n\n\n\n<p><strong>Keempat, <\/strong>buatlah sebuah method dengan nilai kembalian object Scanner. Saya melakukan hal ini supaya object Scanner dapat dipakai berulangkali dengan berbagai jenis tipe data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static Scanner extracted() {\n    return new Scanner(System.in);\n}<\/code><\/pre>\n\n\n\n<p><strong>Kelima, <\/strong>Saya membuat method <strong>displayData()<\/strong> terlebih dahulu. Tujuannya adalah untuk menampilkan isi <em>Linked List<\/em> setiap selesai melakukan suatu aksi.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void displayData(){\n    System.out.println(\"\\nData dalam List: \" + dataStorage);\n    System.out.println(\"Total Data     : \" + dataStorage.size());\n}<\/code><\/pre>\n\n\n\n<p><strong>Keenam, <\/strong>kita buat dua method void untuk menghandle <em>push<\/em> secara mendasar. Maksudnya secara normal di sini adalah, jika tidak menggunakan penunjuk node, maka data yang di <em>push<\/em> akan diletakkan di <em>tail<\/em>. Namun, jika menggunakan penunjuk node, maka data yang di <em>push<\/em> akan di sisipkan di node yang ditunjuk.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void addData() {\n    System.out.print(\"Masukkan Data: \");\n    String tempData = extracted().nextLine();\n    dataStorage.add(tempData);\n    displayData();\n}\n\nprivate static void addDataAtLocation() {\n\t\tboolean status = true;\n\t\tint indexData = 0;\n\t\tdisplayData();\n\t\twhile(status) {\n\t\t\tSystem.out.print(\"Pilih Index Data yang ingin disisipi data: &#91;0-\" + (dataStorage.size() - 1) + \"]: \");\n\t\t\ttry {\n\t\t\t\tstatus = false;\n\t\t\t\tindexData = extracted().nextInt();\n\t\t\t}\n\t\t\tcatch(InputMismatchException e) {\n\t\t\t\tSystem.out.println(\"Data harus berupa Angka!\");\n\t\t\t\tstatus = true;\n\t\t\t}\n\t\t}\n\t\tSystem.out.print(\"Data yang ingin disisipkan pada index data ke- \" + indexData + \": \");\n\t\tString tempData = extracted().nextLine();\n\t\tdataStorage.add(indexData, tempData);\n\t\tdisplayData();\n\t}<\/code><\/pre>\n\n\n\n<p><strong>Ketujuh, <\/strong>Saya membuat dua method void yang digunakan untuk menghandle <em>push<\/em> pada <em>head<\/em> dan <em>tail<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void addDataToFirst() {\n    System.out.print(\"Masukkan Data: \");\n    String tempData = extracted().nextLine();\n    dataStorage.addFirst(tempData);\n    displayData();\n}\n\nprivate static void addDataToLast() {\n    System.out.print(\"Masukkan Data: \");\n    String tempData = extracted().nextLine();\n    dataStorage.addLast(tempData);\n    displayData();\n}<\/code><\/pre>\n\n\n\n<p><strong>Kedelapan, <\/strong>Saya membuat method dengan nilai kembalian boolean yang mana adalah hasil pencarian data pada list. Method ini akan Saya gunakan pada proses <em>pop<\/em> berbasis konten data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static boolean searchData(String data) {\n    return dataStorage.contains(data);\n}<\/code><\/pre>\n\n\n\n<p><strong>Kesembilan<\/strong>, Saya membuat method void yang digunakan untuk menghandle <em>pop<\/em> pada index ke N.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void removeData() {\n    boolean status = true;\n    int indexData = 0;\n    displayData();\n    while(status) {\n        System.out.print(\"Pilih Index Data yang ingin dihapus: &#91;0-\" + (dataStorage.size() - 1) + \"]: \");\n        try {\n            status = false;\n            indexData = extracted().nextInt();\n        }\n        catch(InputMismatchException e) {\n            System.out.println(\"Data harus berupa Angka!\");\n            status = true;\n        }\n    }\n    dataStorage.remove(indexData);\n    displayData();\n}<\/code><\/pre>\n\n\n\n<p><strong>Kesepuluh, <\/strong>selanjutnya kita buat dua method void yang menghandle <em>pop<\/em> pada <em>head<\/em> dan <em>tail<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void removeDataAtFirst() {\n    dataStorage.removeFirst();\n    displayData();\n}\n\nprivate static void removeDataAtLast() {\n    dataStorage.removeLast();\n    displayData();\n}<\/code><\/pre>\n\n\n\n<p><strong>Kesebelas, <\/strong>ini adalah tambahan fungsi yang Saya buat yakni menghapus node berdasarkan konten datanya. Jadi, sebelum melakukan <em>pop<\/em>, terlebih dahulu konten data akan di bandingkan dengan kata kunci pencarian. Proses pembandingan ini dilakukan dengan memanfaatkan method <em>searchData<\/em> yang telah dibuat sebelumnya. Apabila hasil kembalian dari method <em>searchData<\/em> adalah TRUE, maka node yang memiliki data yang dicari tadi akan di-<em>pop<\/em>. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void removeDataByContent() {\n    displayData();\n    System.out.print(\"Masukkan Data yang ingin dihapus: \");\n    String data = extracted().nextLine();\n    if(searchData(data)) {\n        dataStorage.remove(data);\n    }\n    else {\n        System.out.println(\"Anda memasukkan data yang tidak tersimpan di dalam list\");\n    }\n    displayData();\n}<\/code><\/pre>\n\n\n\n<p><strong>Kedua belas<\/strong>, Saya buat method untuk menghandle proses exit program<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void programExit() {\n    System.exit(0);\n}<\/code><\/pre>\n\n\n\n<p><strong>Ketiga belas, Kita buat 4 method yang berfungsi untuk menghandle User Experience dari program ini.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>private static void programTitle() {\n    System.out.println(\"\\nSimple Linked List Program\"\n                     + \"\\nDitulis dalam bahasa pemrograman Java\"\n                     + \"\\nOleh: Muhammad Irfan Luthfi\"\n                     + \"\\ngithub.com\/milstrike\\n\");\n}\n\nprivate static void programSwitcher() {\n    boolean status = true;\n    int indexMenu = 0;\n    while(status) {\n        try {\n            status = false;\n            System.out.print(\"Pilih Menu &#91;1~9]: \");\n            indexMenu = extracted().nextInt();\n        }\n        catch(InputMismatchException e) {\n            System.out.println(\"Masukan harus berupa Angka!\");\n            status = true;\n        }\n    }\n\n    switch(indexMenu) {\n        case 1: addData(); break;\n        case 2: addDataToFirst(); break;\n        case 3: addDataToLast(); break;\n        case 4: addDataAtLocation(); break;\n        case 5: removeData(); break;\n        case 6: removeDataAtFirst(); break;\n        case 7: removeDataAtLast(); break;\n        case 8: removeDataByContent(); break;\n        case 9: programTitle(); break;\n        case 10: programExit(); break;\n    }\n    programMenu();\n}\n\nprivate static void programMenu() {\n    System.out.println(\"\\n.: PROGRAM MENU :.\"\n                     + \"\\n 1. Add Data\"\n                     + \"\\n 2. Add Data at First\"\n                     + \"\\n 3. Add Data at Last\"\n                     + \"\\n 4. Add Data at N Index\"\n                     + \"\\n 5. Remove Data at N Index\"\n                     + \"\\n 6. Remove Data at First\"\n                     + \"\\n 7. Remove Data at Last\"\n                     + \"\\n 8. Remove Data by Data Content\"\n                     + \"\\n 9. About Program\"\n                     + \"\\n10. Program Exit\");\n    programSwitcher();\n}<\/code><\/pre>\n\n\n\n<p>Keempat belas, Panggil method <em>programTitle <\/em>dan <em>programMenu<\/em> di dalam method main.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public static void main(String&#91;] args) {\n    programTitle();\n    programMenu();\n}<\/code><\/pre>\n\n\n\n<p>Program selengkapnya adalah sebagai berikut:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.util.LinkedList;\nimport java.util.Scanner;\nimport java.util.InputMismatchException;\n\n\/*\n * Example of Simple Java Linked List\n * Author: Muhammad Irfan Luthfi\n * https:\/\/github.com\/milstrike\n * \n *\/\n\npublic class JavaLinkedList {\n\t\n\tprivate static LinkedList&lt;String> dataStorage = new LinkedList&lt;String>();\n\t\n\tprivate static Scanner extracted() {\n\t\treturn new Scanner(System.in);\n\t}\n\t\n\tprivate static void displayData(){\n\t\tSystem.out.println(\"\\nData dalam List: \" + dataStorage);\n\t\tSystem.out.println(\"Total Data     : \" + dataStorage.size());\n\t}\n\t\n\tprivate static void addData() {\n\t\tSystem.out.print(\"Masukkan Data: \");\n\t\tString tempData = extracted().nextLine();\n\t\tdataStorage.add(tempData);\n\t\tdisplayData();\n\t}\n\t\n\tprivate static void addDataToFirst() {\n\t\tSystem.out.print(\"Masukkan Data: \");\n\t\tString tempData = extracted().nextLine();\n\t\tdataStorage.addFirst(tempData);\n\t\tdisplayData();\n\t}\n\t\n\tprivate static void addDataToLast() {\n\t\tSystem.out.print(\"Masukkan Data: \");\n\t\tString tempData = extracted().nextLine();\n\t\tdataStorage.addLast(tempData);\n\t\tdisplayData();\n\t}\n\t\n\tprivate static void addDataAtLocation() {\n\t\tboolean status = true;\n\t\tint indexData = 0;\n\t\tdisplayData();\n\t\twhile(status) {\n\t\t\tSystem.out.print(\"Pilih Index Data yang ingin disisipi data: &#91;0-\" + (dataStorage.size() - 1) + \"]: \");\n\t\t\ttry {\n\t\t\t\tstatus = false;\n\t\t\t\tindexData = extracted().nextInt();\n\t\t\t}\n\t\t\tcatch(InputMismatchException e) {\n\t\t\t\tSystem.out.println(\"Data harus berupa Angka!\");\n\t\t\t\tstatus = true;\n\t\t\t}\n\t\t}\n\t\tSystem.out.print(\"Data yang ingin disisipkan pada index data ke- \" + indexData + \": \");\n\t\tString tempData = extracted().nextLine();\n\t\tdataStorage.add(indexData, tempData);\n\t\tdisplayData();\n\t}\n\t\n\tprivate static boolean searchData(String data) {\n\t\treturn dataStorage.contains(data);\n\t}\n\t\n\tprivate static void removeData() {\n\t\tboolean status = true;\n\t\tint indexData = 0;\n\t\tdisplayData();\n\t\twhile(status) {\n\t\t\tSystem.out.print(\"Pilih Index Data yang ingin dihapus: &#91;0-\" + (dataStorage.size() - 1) + \"]: \");\n\t\t\ttry {\n\t\t\t\tstatus = false;\n\t\t\t\tindexData = extracted().nextInt();\n\t\t\t}\n\t\t\tcatch(InputMismatchException e) {\n\t\t\t\tSystem.out.println(\"Data harus berupa Angka!\");\n\t\t\t\tstatus = true;\n\t\t\t}\n\t\t}\n\t\tdataStorage.remove(indexData);\n\t\tdisplayData();\n\t}\n\t\n\tprivate static void removeDataAtFirst() {\n\t\tdataStorage.removeFirst();\n\t\tdisplayData();\n\t}\n\t\n\tprivate static void removeDataAtLast() {\n\t\tdataStorage.removeLast();\n\t\tdisplayData();\n\t}\n\t\n\tprivate static void removeDataByContent() {\n\t\tdisplayData();\n\t\tSystem.out.print(\"Masukkan Data yang ingin dihapus: \");\n\t\tString data = extracted().nextLine();\n\t\tif(searchData(data)) {\n\t\t\tdataStorage.remove(data);\n\t\t}\n\t\telse {\n\t\t\tSystem.out.println(\"Anda memasukkan data yang tidak tersimpan di dalam list\");\n\t\t}\n\t\tdisplayData();\n\t}\n\t\n\tprivate static void programExit() {\n\t\tSystem.exit(0);\n\t}\n\t\n\tprivate static void programTitle() {\n\t\tSystem.out.println(\"\\nSimple Linked List Program\"\n\t\t\t\t         + \"\\nDitulis dalam bahasa pemrograman Java\"\n\t\t\t\t         + \"\\nOleh: Muhammad Irfan Luthfi\"\n\t\t\t\t         + \"\\ngithub.com\/milstrike\\n\");\n\t}\n\t\n\tprivate static void programSwitcher() {\n\t\tboolean status = true;\n\t\tint indexMenu = 0;\n\t\twhile(status) {\n\t\t\ttry {\n\t\t\t\tstatus = false;\n\t\t\t\tSystem.out.print(\"Pilih Menu &#91;1~9]: \");\n\t\t\t\tindexMenu = extracted().nextInt();\n\t\t\t}\n\t\t\tcatch(InputMismatchException e) {\n\t\t\t\tSystem.out.println(\"Masukan harus berupa Angka!\");\n\t\t\t\tstatus = true;\n\t\t\t}\n\t\t}\n\t\t\n\t\tswitch(indexMenu) {\n\t\t\tcase 1: addData(); break;\n\t\t\tcase 2: addDataToFirst(); break;\n\t\t\tcase 3: addDataToLast(); break;\n\t\t\tcase 4: addDataAtLocation(); break;\n\t\t\tcase 5: removeData(); break;\n\t\t\tcase 6: removeDataAtFirst(); break;\n\t\t\tcase 7: removeDataAtLast(); break;\n\t\t\tcase 8: removeDataByContent(); break;\n\t\t\tcase 9: programTitle(); break;\n\t\t\tcase 10: programExit(); break;\n\t\t}\n\t\tprogramMenu();\n\t}\n\t\n\tprivate static void programMenu() {\n\t\tSystem.out.println(\"\\n.: PROGRAM MENU :.\"\n\t\t\t\t         + \"\\n 1. Add Data\"\n\t\t\t\t         + \"\\n 2. Add Data at First\"\n\t\t\t\t         + \"\\n 3. Add Data at Last\"\n\t\t\t\t         + \"\\n 4. Add Data at N Index\"\n\t\t\t\t         + \"\\n 5. Remove Data at N Index\"\n\t\t\t\t         + \"\\n 6. Remove Data at First\"\n\t\t\t\t         + \"\\n 7. Remove Data at Last\"\n\t\t\t\t         + \"\\n 8. Remove Data by Data Content\"\n\t\t\t\t         + \"\\n 9. About Program\"\n\t\t\t\t         + \"\\n10. Program Exit\");\n\t\tprogramSwitcher();\n\t}\n\t\n\tpublic static void main(String&#91;] args) {\n\t\tprogramTitle();\n\t\tprogramMenu();\n\t}\n}<\/code><\/pre>\n\n\n\n<p>Setelah kita compile selanjutnya kita RUN:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/unydevelopernetwork.com\/cdn\/unydevelopernetwork\/JavaLinkedList.mp4\"><\/video><\/figure>\n\n\n\n<p>Baik, bagaimana? sudah paham mengenai <em>Single Linked List?<\/em> Apabila Anda belum paham, silakan tinggalkan pertanyaan pada kolom komentar. Ingat!, hanya pertanyaan yang berhubungan dengan artikel ini (<em>Single Linked List<\/em>) yang akan Saya jawab.<\/p>\n\n\n\n<p>Demikianlah artikel Tutorial: (Struktur Data) Implementasi Single Linked List sederhana dengan Java ini. Semoga apa yang Saya tulis di sini bermanfaat bagi kita semua. Apabila Anda ingin mencuplik artikel ini, jangan lupa untuk mencantumkan URLnya. Terima kasih banyak ^_^<\/p>\n\n\n\n<p><strong>UNDUH PROJECT<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/milstrike\/UNYDeveloperNetwork\/tree\/master\/JavaLinkedList\">https:\/\/github.com\/milstrike\/UNYDeveloperNetwork\/tree\/master\/JavaLinkedList<\/a><\/li><\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Reading Time: <\/span> <span class=\"rt-time\"> 9<\/span> <span class=\"rt-label rt-postfix\">minutes<\/span><\/span>Selamat datang di blogs UNYDeveloperNetwork. Sebagai anak informatika atau anak computer science atau ilkom, yang masih beginner ataupun yang sudah expert pasti mengenal istilah Single Linked List (atau umumnya hanya disebut Linked&#8230;<\/p>\n","protected":false},"author":1,"featured_media":459,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3,2],"tags":[132,131,99,133,104,5,95,84,86,134,96,135,22,129,130,127,126,128,98,105],"class_list":["post-448","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java","category-tutorial","tag-circular-linked-list","tag-double-linked-list","tag-eclipse","tag-first","tag-head","tag-java","tag-java-linked-list","tag-java-scanner","tag-java-util-scanner","tag-last","tag-linked-list","tag-linked-list-java","tag-netbeans","tag-node","tag-pointer","tag-pop","tag-push","tag-single-linked-list","tag-struktur-data","tag-tail"],"featured_image_src":"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-21.png","author_info":{"display_name":"Muhammad Irfan Luthfi","author_link":"https:\/\/unydevelopernetwork.com\/index.php\/author\/admin\/"},"jetpack_featured_media_url":"https:\/\/unydevelopernetwork.com\/wp-content\/uploads\/2020\/04\/image-21.png","jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts\/448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/comments?post=448"}],"version-history":[{"count":1,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts\/448\/revisions"}],"predecessor-version":[{"id":464,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/posts\/448\/revisions\/464"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/media\/459"}],"wp:attachment":[{"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/media?parent=448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/categories?post=448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unydevelopernetwork.com\/index.php\/wp-json\/wp\/v2\/tags?post=448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}