LIST REKURSIF.

LIST REKURSIF

Danang Wahyu Utomo
danang.wu@dsn.dinus.ac.id
+6285 740 955 623

Danang Wahyu Utomo, M.Kom, M.CS

RENCANA KEGIATAN PERKULIAHAN SEMESTER
W

Pokok Bahasan

W

Pokok Bahasan

1 ADT Stack

9


Variasi List Linear

2 ADT Queue

10 Double Linked List

3 List Linear

11 Stack dengan Representasi List

4 List Linear

12 Queue dengan Representasi List

5 List Linear

13 List Rekursif

6 Representasi Fisik List Linear


14 Pohon dan Pohon Biner

7 Variasi List Linear

15 Multi List

8 Ujian Tengah Semester

16 Ujian Akhir Semester

Danang Wahyu Utomo, M.Kom, M.CS

Konten

Pendekatan Iteratif dan Rekursif
Membalik List secara Iteratif

Fungsi Rekursif pada Memory
Membalik List secara Rekursif
Danang Wahyu Utomo, M.Kom, M.CS


Pendekatan Iteratif dan Rekursif






Pendekatan iteratif menggunakan proses perulangan
(loop) untuk menyelesaikan masalah
Dalam konteks prosedural kita memiliki loop sebagai
mekanisme untuk mengulang
Suatu entitas disebut rekursif jika pada definisinya
terkandung dirinya sendiri
Program prosedural juga dapat bersifat rekursif
Fungsi rekursif adalah fungsi yang memanggil dirinya
sendiri

Danang Wahyu Utomo, M.Kom, M.CS


Membalik List secara Iteratif


Input
100

10

Head



200

8

100

300


14

200

400

7

300

Null
400

Output
10

Null

100


8

100
200

14

200

300

7

300
400

400
Head

Danang Wahyu Utomo, M.Kom, M.CS


Membalik List secara Iteratif


Diperlukan tiga variabel pointer :
-

-

-

Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head


10

Null

8

300

100

200

prev
100

curr
200

14


400

300

7

Null
400

next
200
Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Iteratif


Diperlukan tiga variabel pointer :
-


-

-

Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head

10

Null

8


300

100

200

prev
100

curr
200

14

400

300

7

Null
400

next
200
Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Iteratif


Diperlukan tiga variabel pointer :
-

-

-

Current
membentuk link baru sekaligus memutus link sebelumnya
Next
memindahkan pointer current ke node selanjutnya setelah link
sebelumnya diputus
Previous
menyimpan alamat node sebelumnya setelah link diputus
100
head

10

Null

8

100

100

200

prev
100

curr
200

14

400

300

7

Null
400

next
200
Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Iteratif


Fungsi membalik list secara iteratif
void balikListIteratif(){
Node *curr, *prev, *next;
curr = head;
prev = NULL;
while(curr != NULL){
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;

}

Danang Wahyu Utomo, M.Kom, M.CS

Fungsi Rekursif pada Memory


Memory yang dialokasikan pada sebuah program/aplikasi
umumnya dibagi menjadi 4 bagian :
Heap /
Free Store

Stack
Static/Global

Bersifat Dinamis:
Ukuran memori dapat berubah ketika
program dijalankan

Bersifat Statis:
• ukuran memori ditentukan ketika
kompilasi
• ukuran memori tidak dapat berubah

Code(Text)
Danang Wahyu Utomo, M.Kom, M.CS

Fungsi Rekursif pada Memory


Memory yang dialokasikan pada sebuah program/aplikasi
umumnya dibagi menjadi 4 bagian :
Heap /
Free Store

Memori yang dapat di-request selama program
berjalan

Stack

Menyimpan semua informasi tentang
pemanggilan fungsi untuk menyimpan
semua variabel lokal

Static/Global Menyimpan variabel global selama program berjalan

Code(Text)

Menyimpan semua perintah yang akan
dijalankan/dieksekusi
Danang Wahyu Utomo, M.Kom, M.CS

Fungsi Rekursif pada Memory






Stack memory dialokasikan ketika
terjadi pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory

main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS

Fungsi Rekursif pada Memory






Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory

Fungsi_1(x)
main ()
Stack Memory
Danang Wahyu Utomo, M.Kom, M.CS

Fungsi Rekursif pada Memory






Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory

Fungsi_1(y)
Fungsi_1(x)
main ()
Stack Memory

Danang Wahyu Utomo, M.Kom, M.CS

Fungsi Rekursif pada Memory








Stack memory dialokasikan ketika terjadi
pemanggilan fungsi tertentu
Nilai dan kondisi terakhir pada
pemanggilan fungsi tetap tersimpan
pada stack memory
Fungsi baru akan ditumpuk (berjalan)
diatas fungsi sebelumnya (sekaligus
menghentikan sementara eksekusi
fungsi sebelumnya) pada stack memory
Jika fungsi pada tumpukan paling atas
selesai dijalankan, fungsi pada tumpukan
dibawahnya akan dijalankan kembali

Fungsi_1(y)
Fungsi_1(x)
main ()
Stack Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif


Input
100

10

Head



200

8

100

300

14

200

400

7

300

Null
400

Output
10

Null

100

8

100
200

14

200

300

7

300
400

400
Head

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif


Fungsi Membalik list secara Rekursif

7

Null
400

14

400

void balikRekursif (Node *p){
if(p->next == NULL){

300

head = p;
return;

}
balikRekursif(p->next); //rekursif
p->next->next = p;
p->next = NULL;

8

300
200

10

200
100

}
head = 100

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

14

400
300

8

300
200

main()

10

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

14

400
300

balikRekursif()
p = 100

8

main()

10

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

14

400
300

balikRekursif()
p = 100

8

main()

10

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

14

400
300

balikRekursif()
p = 100

8

main()

10

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

14

400
300

balikRekursif()
p = 100

8

main()

10

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

14

400
300

balikRekursif()
p = 100

8

main()

10

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

balikRekursif()
p = 400
balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

balikRekursif()
p = 400
balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=100
}

balikRekursif()
p = 400
balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 400
balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300

300
200
200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 400
balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

Null
400

balikRekursif()
p = 200

14

400

balikRekursif()
p = 100

8

main()

10

300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

balikRekursif()
p = 200

14

balikRekursif()
p = 100

8

main()

10

300
400
400
300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

balikRekursif()
p = 200

14

balikRekursif()
p = 100

8

main()

10

300
400
400
300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

balikRekursif()
p = 200

14

Null
300

balikRekursif()
p = 100

8

300

main()

10

300
400

200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

balikRekursif()
p = 300

7

balikRekursif()
p = 200

14

Null
300

balikRekursif()
p = 100

8

300

main()

10

300
400

200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

Null
300

balikRekursif()
p = 100

8

300

main()

10

200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

Null
300

balikRekursif()
p = 100

8

300

main()

10

200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

Null
300

balikRekursif()
p = 100

8

300

main()

10

200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

Null
300

balikRekursif()
p = 100

8

300

main()

10

200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

Null
300

balikRekursif()
p = 100

8

300

main()

10

200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

balikRekursif()
p = 100

8

main()

10

200
300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

balikRekursif()
p = 100

8

main()

10

200
300
300
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

balikRekursif()
p = 100

8

Null
200

main()

10

200

200
300

100
Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

balikRekursif()
p = 200

14

balikRekursif()
p = 100

8

Null
200

main()

10

200

200
300

100
Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

Null
200

main()

10

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

Null
200

main()

10

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

Null
200

main()

10

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

Null
200

main()

10

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

Null
200

main()

10

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

main()

10

100
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

main()

10

100
200

200
100

Stack Memory

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

main()

10

Stack Memory

100
200

Null
100

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
sudah
dijalankan sebelumnya
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

balikRekursif()
p = 100

8

main()

10

Stack Memory

100
200

Null
100

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

8

100
200

main()
Stack Memory

10

Null
100

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
fungsi sudah dijalankan sebelumnya
}

7

300
400

14

200
300

8

100
200

main()
Stack Memory

10

Null
100

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
fungsi sudah dijalankan sebelumnya
}

7

300
400

14

200
300

8

100
200

main()
Stack Memory

10

Null
100

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
head = 400

Fungsi membalik list secara Rekursif
void balikRekursif (Node *p){
if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

7

300
400

14

200
300

8

100
200

main()
Stack Memory

10

Null
100

Heap Memory

Danang Wahyu Utomo, M.Kom, M.CS

Membalik List secara Rekursif
Fungsi membalik list secara Rekursif

head = 400

void balikRekursif (Node *p){
7

if(p->next == NULL){
head = p;
return;
}
balikRekursif(p->next);
p->next->next = p;
p->next = NULL;
}
void main(){
balikRekursif(head);//head=400
}

300
400

14

200

300

8

100
200

10

Null
100

Danang Wahyu Utomo, M.Kom, M.CS