Anda di halaman 1dari 26

RESUME LINKED LIST

Definisi Linked List


Pengolahan data yang kita lakukan menggunakan komputer seringkali mirip dengan ilustrasi
di atas, yang antara lain berupa penyimpanan data dan pengolahan lain dari sekelompok data
yang telah terorganisir dalam sebuah urutan tertentu. Salah satu cara untuk menyimpan
sekumpulan data yang kita miliki adalah menggunakan larik. Keuntungan dan kerugian
pemakaian larik untuk menyimpan sekelompok data yang banyaknya selalu berubah dan
tidak diketahui dengan pasti kapan penambahan atau penghapusan akan berakhir.

1. Single Linked List


Single linked list atau biasa disebut linked list terdiri dari elemen-elemen individu,
dimana masing-masing dihubungkan dengan pointer tunggal. Masing-masing elemen terdiri
dari dua bagian, yaitu sebuah data dan sebuah pointer yang disebut dengan pointer next.
Dengan menggunakan struktur two-member seperti ini, linked list dibentuk dengan 8 cara
menunjuk pointer next suatu elemen ke elemen yang mengikutinya. Pointer next pada elemen
terakhir merupakan NULL, yang menunjukkan akhir dari suatu list. Elemen pada awal suatu
list disebut head, dan elemen terakhir dari suatu list
disebut tail.
Untuk mengakses elemen dalam linked list, dimulai dari head dan menggunakan
pointer next dari elemen selanjutnya untuk berpindah dari elemen ke elemen berikutnya
sampai elemen yang diminta dicapai. Dengan single linke list, list dapat dilintasi hanya satu
arah dari head ke tail karena masing-masing elemen tidak terdapat link dengan elemen
sebelumnya. Sehingga, apabila kita mulai dari head dan berpindah ke beberapa elemen dan
berharap dapat mengakses elemen sebelumnya, kita harus mulai dari head. Secara konseptual,
linked list merupakan deretan elemen yang berdampingan. Akan tetapi, karena elemenelemen tersebut dialokasikan secara dinamis (menggunakan malloc), sangat penting untuk
diingat bahwa kenyataannya, linked list akan terpencar pencar di memori.

Langkah Pembentukan Single Linked List


1. Deklarasi tipe data simpul Single Linked List.
2. Deklarasi pointer penunjuk kepala Single Linked List.

3. Membentuk simpul baru dan mengaitkannya ke Single Linked List.

LIFO list: simpul baru tambah di depan

FIFO list: simpul baru tambah di ujung

Sorted list: simpul baru disisipkan di antara simpul

4. Mengolah simpul-simpul Single Linked List.


5. Mengembalikan simpul Single Linked List ke memori heap setelah selesai proses.

Deklarasi Tipe Data Simpul Single Linked List

struct tnode {
int data;
struct tnode *next;
};

Contoh Program
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct tnode {
int data;
struct tnode *next;
};
typedef struct tnode node;
node *N,*head,*tail;
void awal()
{
head=NULL;
tail=NULL;
}
int isEmpty()
{
if(head==NULL)
return 1;
else

return 0;
}
void newNode(int bil)
{
N=(node*) malloc(sizeof(node));
if(N!=NULL)
{
N->data=bil;
N->next=NULL;
//printf("%d telah dibuat",N->data);
}
else
printf("Pembuatan simpul gagal");
}
void insertKiri()
{
//menambahkan ke kiri, jika kosong maka langsung menjadi head
if(!isEmpty())
{
N->next=head;
}
else
{
tail=N;
}
head=N;
}
void insertKanan()
{
//menambahkan di kanan, jika kosong langsung ditambahkan sbg
head
if(isEmpty())
{
head=N;
}
else
{

tail->next=N;
}
tail=N;
}
void showList()
{
node *temp=head;
if (!isEmpty())
{
while(temp!=NULL)
{
printf("%d ",temp->data);
temp=temp->next;
}
}
else
printf("Data sudah tidak ada");
}
void hapusKiri()
{
if(isempty())
{
printf("tidak ada data");
}
else
{
node *hapus=head;
head=head->next;
free(hapus);
}
}
void hapusKanan()
{
if(isEmpty())
{
printf("Data kosong!");
}

else
{
node *bantu=head;
if(head==tail)
{
free(bantu);
awal();
}
else
{
while(bantu->next!=tail)
{
bantu=bantu->next;
}
free(tail);
tail=bantu;
}
}

}
void hapusTengah(int index)
{
//asumsi index mesti >0
}
void clear()
{
node *temp;
while(head!=NULL)
{
temp=head;
head=head->next;
free(temp);
}
}
void main()
{

awal();
int pil, angka, index, bil;
do
{
printf ("\nMENU\n");
printf ("1. Tambah Kiri\n");
printf ("2. Tambah Kanan\n");
printf ("3. Show Data\n");
printf ("4. Clear\n");
printf ("5. Hapus Tengah\n");
printf ("6. Hapus Kiri\n");
printf ("7. Hapus Kanan\n");
printf ("0. Exit\n");
printf("Masukkan pilihan : ");scanf("%d",&pil);
switch(pil)
{
case 1:
printf("Masukkan data : ");scanf("%d",&angka);
newNode(angka);
insertKiri();
break;
case 2:
printf("Masukkan data : ");scanf("%d",&angka);
newNode(angka);
insertKanan();
break;
case 3:
showList();
break;
case 4:
clear();
break;
case 5:
printf("Masukkan index : ");scanf("%d",&index);
hapusTengah(index);
break;

case 6:
hapusKiri();
break;
case 7:
hapusKanan();
break;
default : printf("Input salah");
}
}
while (pil!=0); }

Penjelasan Program
Dalam program ini terdapat 8 menu utama yaitu : tambah kiri, tambah kanan, show
data, clear, hapus tengah, hapus kiri, hapus kanan dan exit. Untuk merintah menambah kiri,
jika user ingin menginput tambah kiri maka tekan satu dan akan dipersilahkan untuk
menmbah data pada bagian kiri. Begitu juga dengan tambah kanan. Untuk bagian show data,
jika user menekan pilihan ke 3 maka program akan menampilkan data yang sudah diinputkan
terlebih dahulu tadi dan menampilkan secara berurutan. Untuk pilihan clear, pilihan tersebut
adalah pilihan untuk menghapus data. Penghapusan data akan menghapus semua bagian data
yang sudah terinput sebelumnya. Berbeda dengan hapus tengah, kiri maupun kanan. Jika
hapus tengah maka data yang sudah terinput akan terhapus pada bagian tengah, begitu juga
dengan hapus kanan dan kiri. Untuk pilihan exit, program akan keluar.

2.

Double Linked List

Double-Linked List adalah Linked List yang setiap simpulnya mempunyai dua field bertipe
pointer:
a. satu untuk mengacu simpul berikutnya, biasanya diberi nama next
b. satu untuk mengacu simpul sebelumnya, biasanya diberi nama prev
c. pointer next simpul terakhir diberi nilai NULL
d. pointer prev simpul pertama diberi nilai NULL.
Langkah Pembentukan Double Linked List
1. Deklarasi tipe data simpul Double Linked List.
2. Deklarasi pointer penunjuk kepala Double Linked List.
3. Membentuk simpul baru dan mengaitkannya ke Double Linked List.

LIFO list: simpul baru tambah di depan

FIFO list: simpul baru tambah di ujung

Sorted list: simpul baru disisipkan diantara simpul

4. Mengolah simpul-simpul Double Linked List.


5. Mengembalikan simpul Double Linked List ke memori heap setelah selesai proses.
Elemen-elemen dihubungkan dengan dua pointer dalam satu elemen. Struktur ini
menyebabkan list melintas baik ke depan maupun ke belakang. Masing-masing elemen pada
double linked list terdiri dari tiga bagian, disamping data dan pointer next, masing-masing
elemen dilengkapi dengan pointer prev yang menunjuk ke elemen sebelumnya. Double linked
list dibentuk dengan menyusun sejumlah elemen sehingga pointer next menunjuk ke elemen
yang mengikutinya dan pointer prev menunjuk ke elemen yang mendahuluinya. Untuk
menunjukkan head dari double linked list, maka pointer prev dari elemen pertama menunjuk
NULL. Untuk menunjukkan tail dari double linked list tersebut, maka pointer next dari
elemen terakhir menunjuk NULL. Susunan elemen yang dihubungkan dalam bentuk double
linked list.

Contoh Program
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct data
{
int bil;
struct data *next,*prev;
};
void main ()
{
struct data *node,*head,*cetak;
int pilihan;
head=NULL;
for (;;)
{

printf (" 1. Input Data \n");


printf (" 2. Hapus Data \n");
printf (" 3. View Data \n");
printf (" 4. Exit \n");
printf (" Masukkan Pilihan Anda : ");
scanf ("%d",&pilihan);
system ("cls");
switch (pilihan)
{
case 1:
{
node = (struct data*) malloc (sizeof(struct data));
printf (" Masukkan Bilangan : ");
scanf ("%d",&node->bil);
printf ("\n");
if (head==NULL)
{
node->next=NULL;
node->prev=NULL;
head=node;
}
else
{
node->next=head;
head->prev=node;
head=node;
}
break;
}
case 2:
{
if (head->next == NULL)
{
printf (" Data %d sudah di hapus \n\n",head->bil);
head=NULL;
break;
}

printf (" Data %d sudah di hapus \n\n",head->bil);


head=head->next;
free(head->prev);
break;
}
case 3:
{
cetak=head;
while (cetak!=NULL)
{
printf ("%d ",cetak->bil);
cetak=cetak->next;
}
printf ("\n\n");
break;
}
case 4:
{
exit(1);
}
}
}
getch();
}

Penjelasan program :
Dalam program tersebut terdapat 4 menu utama yaitu input data, hapus data, view
data dan exit. Dalam masing-masing menunya seperti input data, user disuruh untuk
menginputkan atau memasukkan data. Data yang diinputkan dapat dilihat dengan mengketik
pilihan ke 3 yaitu view data. Data yang terlihat adalah data yang telah diinputkan
sebelumnya. Jika ingin menghapus data, user data mengetik pilihan ke 2. Penghapusan data
akan dimulai dari sisi kiri yaitu data yang terakhir diinputkan. Dan menu terakhir adalah exit
yaitu perintah untuk keluar dari program.

3. Circullar Linked List


Adalah double / single LL yang simpul terakhirnya menunjuk ke simpul awal, dan
simpul awalnya menunjuk ke simpul akhir, atau dapat disebut LL yang dibuat seakanakan merupakan sebuah lingkaran dengan titik awal dan titik akhir saling
bersebelahan jika LL tersebut masih

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct tnode
{
int data;
struct tnode *next;
};
typedef struct tnode node;
node *N,*head;
void awal()
{
head=NULL;
}
int isEmpty()
{
if(head==NULL)
return 1;
else
return 0;
}
void newNode(int bil)
{
N=(node*) malloc(sizeof(node));
if(N!=NULL)
{
N->data=bil;
N->next=NULL;

//printf("%d telah dibuat",N->data);


}
else
printf("Pembuatan simpul gagal");
}
void insertKiri()
{
//menambahkan ke kiri, jika kosong maka langsung menjadi head
if(isEmpty())
{
printf("Ini adalah data pertama\n");
//head=N;
getch();
}
else
{
N->next=head;
//head=N;
}
head=N;
}
void insertKanan()
{
//menambahkan di kanan, jika kosong langsung ditambahkan sbg
head
node *current;
if(isEmpty())
{
printf("Ini adalah data pertama\n");
head=N;
getch();
}
else
{

current=head;
while(current->next!= NULL)
{
current=current->next;
}
current->next=N;
}
}
//insert after index
void insertTengah1(int index)
{
if(isEmpty())
{
printf("Maaf, data kosong!");
}
else
{
node *current;
current = head;
int i=1;
while(current!=NULL)
{
if(i==index)
{
N->next=current->next;
current->next=N;
break;
}
i++;
current=current->next;
}
if(current==NULL)
{
printf("Maaf,
data\n");

index

tidak

valid

atau

melebihi

jumlah

}
}
getch();
}
//insert after data=bilangan found
void insertTengah2(int bilangan)
{
node *current;
if(isEmpty())
{
printf("Isi

adalah

kosong.

Kosong

adalah

Amitaba!!!\n");
}
else
{
current=head;
do
{
if(current->data==bilangan)
{
N->next=current->next;
current->next=N;
break;
}
else
{
current=current->next;
}
}while(current!=NULL);
if(current==NULL)
{
printf("Data tidak akan pernah ditemukan!!!\n");
}
}
getch();
}

isi.

//insert standar
void insertTengah3()
{
node *current;
if(isEmpty())
{
printf("Isi

adalah

kosong.

Kosong

Amitaba!!!\n");
getch();
}
else
{
current=head;
while(current->next!=NULL)
{
current=current->next;
}
if(angka<head->data)
{
N->next=head;
head=N;
}
else if(angka>current->data)
{
current->next=N;
N->next=NULL;
}
else
{
current=head;
while(current->next!=NULL)
{
if(current->next->data>=angka)
{
N->next=current->next;
current->next=N;

adalah

isi.

break;
}
current=current->next;
}
}
}
}
void showList()
{
node *current;
current=head;
if(isEmpty())
{
printf("Isi

adalah

kosong.

Amitaba!!!\n");
}
else
{
printf("Data yang ada : ");
while(current!=NULL)
{
printf("%d ",current->data);
current=current->next;
}
}
getch();
}
void hapusKiri()
{
node *temp;
if (isEmpty())
{
printf("Data kosong");
}
else

Kosong

adalah

isi.

{
temp=head;
head=head->next;
free(temp);
}
}
void hapusKanan()
{
node *current,*temp;
if(isEmpty())
{
printf("Isi

adalah

kosong.

Kosong

Amitaba!!!\n");
getch();
}
else
{
current=head;
do
{
if(current->next==NULL)
{
temp=current;
free(temp);
head=NULL;
current=NULL;
}
else if(current->next->next==NULL)
{
temp=current->next;
current->next=NULL;
free(temp);
current=NULL;
}

adalah

isi.

else
current=current->next;
}while(current!=NULL);
}
}
void clear()
{
node *temp;
while(head!=NULL)
{
temp=head;
head=head->next;
free(temp);
}
}

void main()
{
awal();
int pil, angka, index, bil;
do
{
system("cls");
printf ("\nMENU\n");
printf ("1. Tambah Kiri\n");
printf ("2. Tambah Kanan\n");
printf ("3. Show Data\n");
printf ("4. Clear\n");
printf ("5. Tambah Tengah 1\n");
printf ("6. Tambah Tengah 2\n");
printf ("7. Tambah Tengah 3\n");
printf ("8. Hapus Kiri\n");
printf ("9. Hapus Kanan\n");
printf ("0. Exit\n");

printf("Masukkan pilihan : ");scanf("%d",&pil);


switch(pil)
{
case 1:
printf("Masukkan data : ");scanf("%d",&angka);
newNode(angka);
insertKiri();
break;
case 2:
printf("Masukkan data : ");scanf("%d",&angka);
newNode(angka);
insertKanan();
break;
case 3:
showList();
break;
case 4:
clear();
break;
case 5:
printf("Masukkan data : ");scanf("%d",&angka);
printf("Masukkan index : ");scanf("%d",&index);
newNode(angka);
insertTengah1(index);
break;
case 6:
printf("Masukkan data : ");scanf("%d",&angka);
printf("Masukkan bilangan : ");scanf("%d",&bil);
newNode(angka);
insertTengah2(bil);
break;
case 7:
printf("Masukkan data : ");scanf("%d",&angka);
newNode(angka);
insertTengah3(angka);
break;

case 8:
hapusKiri();
break;
case 9:
hapusKanan();
break;
default : printf("Input salah");
}
}
while (pil!=0);
}

1.

Penjelasan

Program yang dihasilkan dari permasalahan pertama adalah berupa program linked list
dengan 9 menu pokok. Menu-menu pokok yang tersedia mencerminkan layanan-layanan
yang disediakan program linked list ini. Sebelum menjelaskan tentang menu-menu pokok
tersebut, terlebih dahulu akan dijelaskan fungsi-fungsi bantu yang akan digunakan dalam
program ini.
1) Fungsi awal
Penjelasan
Fungsi awal ini bertugas untuk memberikan inisialisasi nilai awal pointer head yaitu
head=NULL. Yang berarti bahwa head tidak menunjuk suatu node(simpul) melainkan
hanya menunjuk NULL.
2) Fungsi kosong
Penjelasan
Fungsi kosong bertugas untuk mengecek apakah linked list ini sedang dalam keadaan
kosong atau tidak. Jika linked list sedang dalam keadaan kosong, fungsi akan
menghasilkan nilai keluaran 1 sedangkan sebaliknya jika antrian sedang dalam keadaan
berisi, maka fungsi akan menghasilkan nilai keluaran 0. Linked list dikatakan kosong jika
head==NULL (Head menunjuk NULL).

Berikut akan dijelaskan menu-menu pokok dalam program antrian.


1) Tambah Kiri
Penjelasan
Pada proses menu masukkan diawali dengan meminta input dari user, input dari user
inilah yang akan disimpan dalam bentuk linked list.
Dalam menu tambah kiri ini, ada 2 prosedur yang dilakukan, yaitu membuat node baru
dari data yang telah diinput user dan menambahkannya dari kiri linked list. Pada prosedur
pemuatan node baru akan kita periksa lebih awal apakah N (dalam program ini, N adalah
node/simpul baru) sama dengan NULL. Jika N tidak sama dengan NULL, maka akan
dilanjutkan proses pembuatan nodenya. Dimana bilangan yang kita inputkan akan
menjadi data yang tersimpan di dalam node/simpul, lalu setelah itu dilakukan proses agar
N menunjuk ke NULL. Kemudian untuk menambahkan node baru yang kita buat dari sisi
kiri, maka akan dilakukan beberapa tahapan proses. Yang pertama dilakukan adalah
pengecekan isEmpty, apakah head menunjuk NULL atau tidak, jika head menunjuk
NULL berarti belum ada simpul yang ditunjuk head, berarti data yang diinputkan
merupakan node/simpul pertama, jika tidak berarti sudah ada node yang berhubungan
dengan head, maka untuk proses selanjutnya akan menyambung node yang baru dengan
node yang sudah ada ,dimana node baru akan menunjuk ke yang ditunjuk oleh head (N>next=head ). Kemudian untuk proses terakhir adalah membuat head menunjuk node
yang baru saja ditambahkan (head=N ).
2) Tambah Kanan
Penjelasan
Pada proses menu masukkan diawali dengan meminta input dari user, input dari user
inilah yang akan disimpan dalam bentuk linked list.
Dalam menu tambah kanan ini, ada 2 prosedur yang dilakukan, yaitu membuat node baru
dari data yang telah diinput user dan menambahkannya dari kanan linked list.Pada
prosedur pemuatan node baru akan kita periksa lebih awal apakah N (dalam program ini,
N adalah node/simpul baru) sama dengan NULL. Jika N tidak sama dengan NULL, maka
akan dilanjutkan proses pembuatan nodenya. Dimana bilangan yang kita inputkan akan

menjadi data yang tersimpan di dalam node/simpul, lalu setelah itu dilakukan proses agar
N menunjuk ke NULL. Kemudian untuk menambahkan node baru yang kita buat dari sisi
kanan, maka akan dilakukan beberapa tahapan proses. Yang pertama dilakukan adalah
pengecekan dengan fungsi isEmpty, apakah head menunjuk NULL atau tidak, jika head
menunjuk NULL berarti belum ada simpul yang ditunjuk head, berarti data yang
diinputkan merupakan node/simpul pertama, kemudian jadikan head menunjuk N
(head=N), jika tidak berarti sudah ada node yang berhubungan dengan head, maka untuk
proses selanjutnya akan menyambung node yang baru dengan node yang sudah ada.
Pada proses ini, kita akan menambahkan node baru dari kanan linked list yang kita tahu
pada sisi paling kanan itu node terakhir akan menunjuk NULL, oleh sebab itu node yang
akan kita tambahkanlah yang akan menunjuk NULL, jadi kita harus melakukan
pengecekan dari kiri ke kanan agar bisa memperoleh posisi node terakhir yang menunjuk
NULL, dengan cara melakukan pengecekan apakah head->next != NULL ? jika ya, maka
akan dilakukan proses head=head->next, selama kondisi head->next != NULL masih
ditemukan. Jika head->next == NULL, maka akan dilakukan proses head->next = N,
dimana N sebagai node baru akan berhubungan dengan node sebelumnya pada linked list
ini, dan N->next menunjuk NULL. Tapi pada proses ini kita akan menghadapi kendala,
yaitu jika kita memakai head sebagai variabel pengecekan maka dalam situasi tertentu
akan terjadi pemutusan data, karena head akan berpindah posisi, sehingga menyebabkan
data menjadi tak berhubungan dan menyebabkan pemutusan data. Untuk mengatasi hal
tersebut, kita bisa memakai variabel bantuan untuk menggantikan fungsi head, dimana
pada program ini variabel bantuan itu dinamakan current. Current ini harus dideklarasikan
terlebih dahulu dimana current=head. Sehingga tidak ada data yang terputus.
3) Show Data
Penjelasan
Proses pada menu Show Data sepenuhnya dilaksanakan oleh prosedur showList. Hal
pertama yang dilakukan pada prosedur ini adalah pengecekan apakah linked list sedang
dalam keadaan kosong atau tidak dengan memakai fungsi isEmpty. Jika linked list sedang
kosong, maka akan ditampilkan pesan ke user karena tidak ada data yang bisa
ditampilkan. Sedangkan jika antrian tidak dalam keadaan sedang kosong, maka akan
dilakukan proses menampilkan data dalam linked list.

Sama seperti insert data dari kanan, pada prosedur showList ini harus data variabel bantu
dari head untuk menghindari proses pemutusan data jika kita memakai head untuk
menampilkan data. Dalam proses menampilkan data, digunakan variabel bantu current
yang pertama-tama menunjuk ke posisi head (current=head). Setelah itu akan dilakukan
looping yang dalam setiap loop nya akan menampilkan data yang tersimpan pada linked
list (current->data ) dan dilakukan penambahan current (current=currrent->next). Loop
akan terus berlanjut sampai current==NULL.
4) Clear
Penjelasan
Dalam prosesnya menu Clear akan memanfaatkan fungsi clear untuk memproses
pengosongan data. Karena tidak boleh memakai cara langsung ( head=NULL), maka
yang pertama kita lakukan adalah membuat variabel bantu yang berfungsi untuk
pengosongan data (free()), dalam program ini variabel bantuan yang digunakan
dinamakan temp. Untuk mengosongkan data (termasuk alokasi memorinya), maka kita
harus melakukannya dengan melakukan proses pengosongan satu per satu node,
walaupun dalam tampilan terlihat pengosongan hanya 1 kali saja. Pengosongan selesai
jika head==NULL, jadi kita perlu loop (perulangan) untuk mengecek sekaligus
melakukan pengosongan. Jika head!=NULL, maka yang dilakukan pertama adalah
membuat temp=head, lalu membuat head=head->next untuk memindahkan posisi pointer
head. Kemudian karena temp=head, maka dengan fungsi free, kosongkan data yang
ditunjuk temp (free(temp)). Dimana proses loop pengosongan ini selesai jika head sudah
menunjuk NULL (head=NULL).
5) Tambah Tengah 1
Penjelasan
Pada insertTengah1 ini akan dilakukan proses penambahan node baru yang ditambahkan
setelah node index yang diinputkan. Seperti biasa proses yang dilakukan pertama kali
adalah penginputan data untuk node baru. Lalu akan diinputkan juga index yang
fungsinya adalah untuk menjadi patokan dalam menambahkan node baru, yaitu node baru
ditambahkan setelah node index, Misalnya index yang diinput 3, maka node baru akan
ditambahkan setelah node 3. Kemudian akan dilakukan pembuatan node baru dengan

memanggil prosedur newNode, lalu akan dilanjutkan dengan prosedur insertTengah1.


Pada prosedur ini, hal yang pertama kali dilakukan adalah melakukan pengecekan linked
list, apakah linked list kosong, jika kosong maka akan ditampilkan pesan. Jika tidak maka
akan dilanjutkan proses loop untuk mengetahui posisi tempat menambahkan data, dimana
kita membutuhakn variabel bantuan untuk head, yang dalam program ini disebut current,
lalu inisialisasikan current=head. Untuk melakukan pengecekan, kita membutuhkan
variabel i, sebagai urutan node, yang mana i=1 ketika sudah ada node dalam linked
list(node pertama). Kemudian lakukan pengecekan dengan batasan jika current!=NULL,
maka akan dilakukan proses pencarian posisi penambahan node baru dimana jika
i==index maka di tempat itulah akan dibuat/ditambahkan node, jika tidak maka akan terus
dilakukan pengecekan sampai current=NULL dengan increment i. Kemudian setelah
proses loop berakhir, jika current bernilai NULL, berarti indeks yang dimasukkan tidak
valid atau indeks melebihi jumlah data.
6) Tambah Tengah 2
Penjelasan
Pada insertTengah2 ini akan dilakukan proses penambahan node baru yang ditambahkan
setelah data bilangan yang ada pada node sesuai yang diinputkan. Seperti biasa proses
yang dilakukan pertama kali adalah penginputan data untuk node baru. Lalu akan
diinputkan juga bilangan yang fungsinya adalah untuk menjadi patokan dalam
menambahkan node baru, yaitu node baru ditambahkan setelah data bilangan yang ada
pada node di linked list sesuai inputan, misalnya bilangan yang diinput 3, maka node baru
akan ditambahkan setelah node->data==3. Kemudian akan dilakukan pembuatan node
baru dengan memanggil prosedur newNode, lalu akan dilanjutkan dengan prosedur
insertTengah2. Pada prosedur ini, hal yang pertama kali dilakukan adalah melakukan
pengecekan linked list, apakah linked list kosong, jika kosong maka akan ditampilkan
pesan. Jika tidak maka akan dilanjutkan proses loop untuk mengetahui posisi tempat
menambahkan data, dimana kita membutuhkan variabel bantuan untuk head, yang dalam
program ini disebut current, lalu inisialisasikan current=head. Kemudian lakukan
pengecekan dengan batasan jika current!=NULL, maka akan dilakukan proses pencarian
posisi penambahan node baru dimana jika current->data==bilangan yang diinputkan
maka setelah posisi itulah akan dibuat/ditambahkan node barunya, jika tidak maka akan
terus dilakukan pengecekan sampai current==NULL. Jika current==NULL, maka bisa

dipastikan bahwa node baru tidak bisa ditambahkan karena data bilangan inputan yang
dicari tidak bisa ditemukan dalam linked list, sehingga sesuai persyaratan maka node baru
tidak bisa ditambahkan.
7) Tambah Tengah 3
Penjelasan
Pertama, ciptakan variable current dan temp, kemudian cek dengan fungsi isEmpty,
apakah data kosong atau tidak, jika kosong, maka tampilkan pesan Isi adalah kosong.
Kosong adalah isi. Amitaba, namun jika terdapat data, maka proses akan masuk
statement else, dimana pada statement else, pertama set nilai current sama dengan head,
kemudian lakukan perulangan, dengan menggunakan while, sampai current->next tidak
sama dengan NULL, kemudian laksanakan statement current=current->next, yang
berfungsi untuk menunjuk data yang terakhir. Kemudian masuk ke pengecekan kondisi if.
Jika angka yang merupakan input dari user lebih kecil dari head->data, maka nilai N>next sama dengan head, dan head sama dengan N. Dengan demikian, jika angka lebih
kecil dari nilai head->data, data baru akan disisipkan disebelah kiri head.
Jika tidak memenuhi kondisi, pengecekan akan dilanjutkan dengan kondisi jika angka
lebih besar dari current ->data, maka current->next sama dengan N, kemudian N->next
sama dengan NULL ini berarti apabila angka lebih besar dari nilai current->data, data
akan disisipkan disebelah kanan dari data yang terakhir (current).
Kemudian, jika tidak memenuhi kondisi keduanya, masuk ke blok else. Pada blok else,
pertama-tama set nilai current sama dengan head. Dengan melakukan perulangan dengan
while, selama nilai current->next tidak sama dengan NULL. Didalam perulangan,
terdapat pengecekan kondisi if, yaitu jika current->next->data yang merupakan isi nilai
dari current->next lebih besar atau sama dengan nilai angka, maka N->next di set sama
dengan nilai current->next dan current->next di set menunjuk ke N, kemudian keluar dari
perulangan. Jika tidak memenuhi kondisi current->next->data yang merupakan isi nilai
dari current->next lebih besar atau sama dengan nilai angka, maka statement yang
dilakukan adalah current sama dengan current->next, dan poses perulangan dilanjutkan.
8) Hapus Kiri
Penjelasan

Untuk pengapusan kiri, caranya sama dengan cara pengosongan pada menu 4 Clear.
Hanya saja sedikit ada penambahan pada pengecekan apakah node masih kosong dengan
fungsi isEmpty. Jadi tidak perlu lagi dijelaskan.
9) Hapus Kanan
Penjelasan
Pertama, ciptakan variable current dan temp, kemudian cek dengan fungsi isEmpty,
apakah data kosong atau tidak, jika kosong, maka tampilkan pesan Isi adalah kosong.
Kosong adalah isi. Amitaba, namun jika terdapat data, maka proses akan masuk
statement else, dimana pada statement tersebut dilakukan set variable current sama
dengan head, sebagai penanda urutan data yang pertama. Lakukan perulangan sampai
current sama dengan NULL. Jika current->next sama dengan NULL, maka variable temp
bernilai sama dengan current, kemudian data pada variable temp dihapus dengan fungsi
free, dan set nilai head sama dengan NULL, maka data akan hilang. Sebagai penanda
proses penghapusan telah dilakukan, variabel current diubah nilainya menjadi NULL.
Sedangkan apabila kondisi tidak terpenuhi, masuk kepada pengecekan kondisi yang
kedua. Jika current->next->next sama dengan NULL, otomatis ini menandakan bahwa
data yang ada adalah 2 buah atau lebih, sehingga set nilai temp sama dengan current>next, kemudian set nilai current->next sama dengan NULL, kemudian free atau
hapuskan nilai pada temp. Sama seperti sebelumnya, sebagai penanda proses
penghapusan telah dilakukan, variabel current diubah nilainya menjadi NULL.
Kemudian, apabila tidak memenuhi kondisi yang kedua, otomatis masuk ke statement
else, yaitu current=current->next, perulangan ini akan terus berlangsung, selama current
tidak sama dengan NULL.

Anda mungkin juga menyukai