📗Praktikum 2

Deskripsi

Pada praktikum 2 ini akan dibuat beberapa method untuk menghapus isi linked list pada class DoublyLinkedList. Penghapusan dilakukan dalam tiga cara di bagian paling depan, paling belakang, dan sesuai indeks yang ditentukan pada struktur data linked list. Method tambahan tersebut akan ditambahkan sesuai pada diagram class berikut,

Langkah Percobaan

  • Buatlah method removeFirst() di dalam class DoublyLinkedList.

public void removeFirst() throws Exception {
    if (isEmpty()) {
        throw new Exception("Linked List masih kosong, tidak dapat dihapus!");
    } else if (size == 1) {
        removeLast();
    } else {
        head = head.next;
        head.prev = null;
        size--;
    }
}
  • Tambahkan method removeLast() yang masih belum dibuat pada tahap sebelumnya.

public void removeLast() throws Exception {
    if (isEmpty()) {
        throw new Exception("Linked List masih kosong, tidak dapat dihapus!");
    } else if (head.next == null) {
        head = null;
        size--;
        return;
    }
    Node current = head;
    while (current.next.next != null) {
        current = current.next;
    }
    current.next = null;
    size--;
}
  • Terakhir, tambahkan method remove() pada kelas DoublyLinkedList.

public void remove(int index) throws Exception {
    if (isEmpty() || index >= size) {
        throw new Exception("Nilai indeks di luar batas");
    } else if (index == 0) {
        removeFirst();
    } else {
        Node current = head;
        int i = 0;
        while (i < index) {
            current = current.next;
            i++;
        }
        if (current.next == null) {
            current.prev.next = null;
        } else if (current.prev == null) {
            current = current.next;
            current.prev = null;
            head = current;
        } else {
            current.prev.next = current.next;
            current.next.prev = current.prev;
        }
        size--;
    }
}
  • Selanjutnya, untuk menguji method remove yang telah Anda buat, tambahkan beberapa kode berikut pada main class.

dll.addLast(50);
dll.addLast(40);
dll.addLast(10);
dll.addLast(20);
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");
dll.removeFirst();
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");
dll.removeLast();
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");
dll.remove(1);
dll.print();
System.out.println("Size : " + dll.size());
System.out.println("==========================");

Verifikasi Hasil Praktikum

Jika program berhasil dikompilasi dan dijalankan, maka akan menghasilkan output seperti gambar berikut,

Pertanyaan

  • Apakah maksud statement berikut pada method removeFirst()? head = head.next; head.prev = null;

  • Bagaimana cara mendeteksi posisi data ada pada bagian akhir pada method removeLast()?

  • Jelaskan alasan mengapa potongan kode program di bawah ini tidak cocok untuk perintah remove! Node tmp = head.next; head.next = tmp.next; tmp.next.prev = head;

  • Jelaskan fungsi kode program berikut ini pada fungsi remove!

    current.prev.next = current.next;
    current.next.prev = current.prev;

Last updated