Ganjil 2017
N IL
N IL
Beberapa Terminology:
Suatu node successor adalah node berikutnya dalam sequence, node terakhir tidak mempun-
yai successor. Node predecessor adalah node sebelumnya dalam sequence, node pertama
tidak mempunyai predecessor. Panjang (length) suatu list adalah jumlah elemen di dalam-
nya. List boleh saja empty (tidak mempunyai elemen).
2-1
2-2 Lecture 2: Linked Lists
Mendeklarasikan Node:
Linked list terdiri dari node, kita perlu mendeklarasikan sebuah struktur yang mendefinisikan
sebuah node tunggal. Struktur kita harus memiliki setidaknya satu variabel untuk bagian
data dan pointer untuk node berikutnya. Dalam C++ suatu node dideklarasi dengan cara:
struc Node {
int key ;
Node* next ;
};
atau
class Node {
int key ;
Node* next ;
};
Node* L = NULL ;
head
L N U LL
L = new Node ;
Inisialisasi atau berikan nilai (content) daripada node dan set pointer ke NULL.
Lecture 2: Linked Lists 2-3
L->key = 1 ;
L->next= NULL ;
t = new Node ;
t->key = 3 ;
t->next= NULL ;
L->next = t ;
class listNode {
private:
Node *head, *tail;
public:
listNode(){
head=NULL;
tail=NULL;
}
2-4 Lecture 2: Linked Lists
};
Sekarang, kita akan menulis sebuah fungsi untuk node. Proses pembuatan node sangat
sederhana. Kita membutuhkan pointer dari tipe node (yang kita definisikan) dan kita akan
memasukkan nilai ke field data. Field node berikutnya akan dinyatakan sebagai NULL
karena akan menjadi simpul terakhir dari linked list.
Nah, fungsinya akan memiliki kasus yang sangat spesial dimana kita ingin tahu apa yang
akan terjadi jika linked list masih kosong? Kita harus memeriksanya. Apakah Anda ingat
bahwa kepala menunjuk ke simpul pertama? Artinya jika kepala sama dengan NULL maka
kita dapat menyimpulkan bahwa linked list kosong.
Perlu diketahui bahwa jika hanya ada satu node (yang akan kita buat) dalam linked list,
maka disebut head dan tail.
Dan jika sebuah linked list sudah dibuat, maka kita akan memasukkan node ini di akhir
linked list. Kita tahu bahwa simpul terakhir disebut tail. Jadi kita akan membuat node
yang baru dibuat ini di setelah node tail .
Pembuatan node baru di akhir linked list memiliki 2 langkah:
• Menghubungkan node yang baru dibuat dengan node ekor. Berarti menyampaikan
alamat simpul baru ke pointer ekor berikutnya.
• Pointer tail harus selalu menunjuk ke simpul terakhir. Jadi kita akan membuat tail
pointer kita sama dengan node baru.
createNode(value)
1 Node ∗ temp =new Node
2 temp- > key =value
3 temp- > next =NULL
4 if (head = =NULL)
5 head =temp
6 tail =temp
7 temp =NULL
8 else
9 tail - > next =temp
10 tail =temp
Lecture 2: Linked Lists 2-5
N U LL Pointer:
N U LL pointer digunakan untuk menunjukkan akhir dari list. Akan selalu di uji (tested)
sebelum menggunakan pinter.
Node* p ;
while( p != NULL ) ......
Node* p ;
while( !p ) ......
list-Traversal()
1 Node ∗ p =head
2 while p 6= null
3 print content
4 p =p- > next
• Menghapus diakhir
• Menghapus diawal
dari linked list karena Anda akan menghapus node terakhir dan membuat node sebelumnya
sebagai tail linked list.
Algoritma harus mampu menemukan node yang datang sebelum node terakhir. Hal ini dapat
dicapai dengan melintasi linked list. Buat dua pointer sementara dan misalkan mereka
bergerak melalui seluruh linked list. Pada akhirnya, node sebelumnya akan menunjuk ke
node kedua ke node terakhir dan node saat ini akan menunjuk ke node terakhir, yaitu node
yang akan dihapus. Kita akan menghapus node ini dan membuat node sebelumnya sebagai
tail.
deleteLast()
1 Node ∗ curr =new Node
2 Node ∗ prev =new Node
3 curr =head
4 while (curr - > next 6=NULL)
5 prev =curr
6 curr =curr - > next
7 tail =prev
8 prev - > next =NULL
9 delete curr