LINKED LIST II
- michael kurniawan
- Feb 25, 2020
- 2 min read
Setelah mengetahui apa itu Linked List pada Blog Linked List 1
pada blog Linked List II ini saya akan menjelaskan tentang jenis-jenis Linked List.
CIRCULAR SINGLE LINKED LIST
Circular Single Linked List adalah sebuah Linked List dimana semua node terhubung untuk membentuk sebuah loop.
Pada Circular Single Linked List tidak memiliki NULL pada bagian akhirnya.

Pada illustrasi diatas setiap node pada Linked List mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data yang merujuk kenode berikutnya.
Pada akhir Linked List node terakhir akan menunjuk kenode terdepan sehingga Linked List tersebut berputar/mengloop. Node terakhir akan menujuk lagi ke head.
Cara Deklarasi Node Circular Single Linked List
typedef struct TNode{
int data;
TNode *next;
};
DOUBLY LINKED LIST
Doubly Linked List adalah Linked List dua arah dimana yang satu berisi refrensi kedata berikutnya dan yang satunya lagi berisi data refrensi berikutnya.

deklarasi Doubly Linked List
struct tnode {
int value;
struct tnode *next;
struct tnode *prev;
};
struct tnode *head = 0;
struct tnode *tail = 0;
Doubly Linked List Insert
Pertama-tama kita harus mengalokasikan node baru dan menetapkan nilainya, dan kemudian kita menghubungkan node dengan Linked List yang ada.
Misalnya untuk menambahkan node dibelakang tail
Maka deklarasinya
struct tnode *node =
(struct tnode*) malloc(sizeof(struct tnode));
node->value = x;
node->next = NULL;
node->prev = tail;
tail->next = node;
tail = node;
Misalnya untuk menambahkan node diantara head dan tail
Maka deklarasinya
struct tnode *a = ??;
struct tnode *b = ??;
struct tnode *node =
(struct tnode*) malloc(sizeof(struct tnode));
node->value = x;
node->next = b;
node->prev = a;
a->next = node;
b->prev = node;
Doubly Linked List Delete
Ada beberapa kondisi yang harus diperhatikan pada saat menghapus Doubly Linked List
1. Pastikan node yang dihapus adalah satu-satunya node pada Linked List.
2. Node yang dihapus head.
3. Node yang dihapus tail.
4. Node yang dihapus bukan head atau tail.
Jika yang dihapus hanya nodenya maka deklarasinya.
free(head);
head = NULL;
tail = NULL;
Jika yang dihapus hanya head maka deklarasinya.
head = head->next;
free(head->prev);
head->prev = NULL;
Jika yang dihapus hanya tail maka deklarasinya.
tail = tail->prev;
free(tail->next);
tail->next = NULL;
Jika yang dihapus bukan merupakan head ataupun tail maka deklarasinya.
struct tnode *curr = head;
while ( curr->next->value != x ) curr = curr->next;
struct tnode *a = curr;
struct tnode *del = curr->next;
struct tnode *b = curr->next->next;
a->next = b;
b->prev = a;
free(del);
Circural Doubly Linked List
konsepnya sama seperti Circular Single Linked List tetapi total pointernya disetiap node terdapat 2.

Comments