Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Haaste: Size- ja Delete-metodien Toteuttaminen LinkedListissä | Perusrakenteet Javassa
Java-tietorakenteet

bookHaaste: Size- ja Delete-metodien Toteuttaminen LinkedListissä

Tehtävä

Olet toteuttanut kolme neljästä CRUD-toiminnosta. Tässä tehtävässä sinun tulee toteuttaa kaksi metodia:

  • public int size();
  • public void delete(int index).

Tehtävä löytyy GitHubista, joten toteuta se paikallisesti IDE:ssäsi.

Näet tämän tehtävän ratkaisun kommenttien kera toteutuksen jälkeen.

Lyhyt ohje tehtävän suorittamiseen:

  • Suosittelen aloittamaan size()-metodista. Ensin tulee määritellä muuttuja, joka seuraa alkioiden määrää listassa, ja palauttaa tämä muuttuja metodista;
  • size()-metodissa seuraa samoja vaiheita kuin display()-metodissa. Tulostamisen sijaan kasvata määrittelemääsi muuttujaa;
  • delete()-metodissa välitä index parametrina. On tärkeää tarkistaa indeksin oikeellisuus ennen jatkamista;
  • Jos index == 0, päivitä viittaus asettamalla head = head.next;
  • Seuraavaksi käytä for-silmukkaa löytääksesi halutun indeksin alkion;
  • Kun oikea alkio löytyy, suorita seuraava operaatio:
    node.next = node.next.next;;
  • Näin poistat viittauksen poistettavaan alkioon, jolloin se poistuu listasta.

Kun olet suorittanut tehtävän, voit ajaa main-metodin, jossa on valmiita testejä.

Voit lisäksi ajaa yksikkötestit test-kansiossa varmistaaksesi ratkaisusi.

  • Iteroi huolellisesti – toteuttaessasi size()-metodia, käy lista läpi kuten display()-metodissa, mutta tulostamisen sijaan kasvata laskuria;
  • Huomioi poikkeustapauksetdelete()-metodissa tarkista aina, onko index == 0 päivittääksesi head oikein, ja varmista että indeksi on sallituissa rajoissa ennen jatkamista;
  • Päivitä viittaukset oikein – kun poistat solmun, päivitä current.next = current.next.next ohittaaksesi alkion, jolloin se poistuu listasta.
package com.example;

class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class SinglyLinkedList {
    private Node head;

    public SinglyLinkedList() {
        this.head = null;
    }

    public void append(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            return;
        }

        Node current = head;
        while (current.next != null) {
            current = current.next;
        }

        current.next = newNode;
    }

    public void display() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }

    public void update(int index, int newData) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid index");
            return;
        }

        Node current = head;
        for (int i = 0; i < index; i++) {
            current = current.next;
        }

        current.data = newData;
    }

    public void delete(int index) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid Index");
            return;
        }

        if (index == 0) {
            head = head.next;
            return;
        }

        Node current = head;
        for (int i = 0; i < index - 1; i++) {
            current = current.next;
        }

        current.next = current.next.next;
    }

    public int size() {
        int count = 0;
        Node current = head;
        while (current != null) {
            count++;
            current = current.next;
        }
        return count;
    }

}

public class Main {
    public static void main(String[] args) {
        SinglyLinkedList linkedList = new SinglyLinkedList();

        // Adding elements to the end of the list (Create)
        linkedList.append(1);
        linkedList.append(2);
        linkedList.append(3);
        linkedList.append(4);

        // Displaying the content of the list (Read)
        System.out.println("Contents of the list:");
        linkedList.display();

        // Updating a value by index (Update)
        linkedList.update(2, 10);
        System.out.println("List after updating the value at index 2:");
        linkedList.display();

        // Deleting an element by index (Delete)
        linkedList.delete(1);
        System.out.println("List after deleting the element at index 1:");
        linkedList.display();
    }
}
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Suggested prompts:

Can you explain how the size() method works in this implementation?

What happens if I try to delete an element at an invalid index?

Can you walk me through the delete() method step by step?

bookHaaste: Size- ja Delete-metodien Toteuttaminen LinkedListissä

Pyyhkäise näyttääksesi valikon

Tehtävä

Olet toteuttanut kolme neljästä CRUD-toiminnosta. Tässä tehtävässä sinun tulee toteuttaa kaksi metodia:

  • public int size();
  • public void delete(int index).

Tehtävä löytyy GitHubista, joten toteuta se paikallisesti IDE:ssäsi.

Näet tämän tehtävän ratkaisun kommenttien kera toteutuksen jälkeen.

Lyhyt ohje tehtävän suorittamiseen:

  • Suosittelen aloittamaan size()-metodista. Ensin tulee määritellä muuttuja, joka seuraa alkioiden määrää listassa, ja palauttaa tämä muuttuja metodista;
  • size()-metodissa seuraa samoja vaiheita kuin display()-metodissa. Tulostamisen sijaan kasvata määrittelemääsi muuttujaa;
  • delete()-metodissa välitä index parametrina. On tärkeää tarkistaa indeksin oikeellisuus ennen jatkamista;
  • Jos index == 0, päivitä viittaus asettamalla head = head.next;
  • Seuraavaksi käytä for-silmukkaa löytääksesi halutun indeksin alkion;
  • Kun oikea alkio löytyy, suorita seuraava operaatio:
    node.next = node.next.next;;
  • Näin poistat viittauksen poistettavaan alkioon, jolloin se poistuu listasta.

Kun olet suorittanut tehtävän, voit ajaa main-metodin, jossa on valmiita testejä.

Voit lisäksi ajaa yksikkötestit test-kansiossa varmistaaksesi ratkaisusi.

  • Iteroi huolellisesti – toteuttaessasi size()-metodia, käy lista läpi kuten display()-metodissa, mutta tulostamisen sijaan kasvata laskuria;
  • Huomioi poikkeustapauksetdelete()-metodissa tarkista aina, onko index == 0 päivittääksesi head oikein, ja varmista että indeksi on sallituissa rajoissa ennen jatkamista;
  • Päivitä viittaukset oikein – kun poistat solmun, päivitä current.next = current.next.next ohittaaksesi alkion, jolloin se poistuu listasta.
package com.example;

class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class SinglyLinkedList {
    private Node head;

    public SinglyLinkedList() {
        this.head = null;
    }

    public void append(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            return;
        }

        Node current = head;
        while (current.next != null) {
            current = current.next;
        }

        current.next = newNode;
    }

    public void display() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }

    public void update(int index, int newData) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid index");
            return;
        }

        Node current = head;
        for (int i = 0; i < index; i++) {
            current = current.next;
        }

        current.data = newData;
    }

    public void delete(int index) {
        if (index < 0 || index >= size()) {
            System.out.println("Invalid Index");
            return;
        }

        if (index == 0) {
            head = head.next;
            return;
        }

        Node current = head;
        for (int i = 0; i < index - 1; i++) {
            current = current.next;
        }

        current.next = current.next.next;
    }

    public int size() {
        int count = 0;
        Node current = head;
        while (current != null) {
            count++;
            current = current.next;
        }
        return count;
    }

}

public class Main {
    public static void main(String[] args) {
        SinglyLinkedList linkedList = new SinglyLinkedList();

        // Adding elements to the end of the list (Create)
        linkedList.append(1);
        linkedList.append(2);
        linkedList.append(3);
        linkedList.append(4);

        // Displaying the content of the list (Read)
        System.out.println("Contents of the list:");
        linkedList.display();

        // Updating a value by index (Update)
        linkedList.update(2, 10);
        System.out.println("List after updating the value at index 2:");
        linkedList.display();

        // Deleting an element by index (Delete)
        linkedList.delete(1);
        System.out.println("List after deleting the element at index 1:");
        linkedList.display();
    }
}
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 7
some-alt