Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Udfordring: Implementering af Size- og Delete-metoder i LinkedList | Fundamentale Datastrukturer i Java
Java Datastrukturer

bookUdfordring: Implementering af Size- og Delete-metoder i LinkedList

Opgave

Du har implementeret tre ud af fire CRUD-operationer sammen. I denne opgave skal du implementere to metoder:

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

Opgaven ligger på GitHub, så du skal implementere den lokalt i dit IDE.

Du vil se løsningen på denne opgave med kommentarer til implementeringen.

En kort vejledning til, hvordan du løser denne opgave:

  • Det anbefales at starte med size()-metoden. Først skal du deklarere en variabel til at holde styr på antallet af elementer i listen, og derefter blot returnere denne variabel fra metoden;
  • I size()-metoden skal du følge de samme trin som i display()-metoden. Men i stedet for at udskrive elementerne på skærmen, skal du inkrementere den variabel, du har oprettet;
  • I delete()-metoden skal du sende index som parameter. Det er vigtigt at validere indekset for at sikre, at det er inden for det korrekte interval;
  • Hvis index == 0, skal du blot opdatere referencen ved at sætte head = head.next;
  • Udfør derefter operationer med en for-løkke for at finde det ønskede indeks for elementet;
  • Når det nødvendige element er fundet, skal du udføre følgende operation:
    node.next = node.next.next;;
  • På denne måde fjerner du referencen til det slettede element og sletter det dermed fra listen.

Når du har afsluttet opgaven, kan du køre main-metoden, hvor der er nogle tests til rådighed for dig.

Derudover kan du køre enhedstestene, der ligger i test-mappen, for at validere din løsning.

  • Iterér omhyggeligt – når du implementerer size()-metoden, skal du gennemløbe listen ligesom i display(), men i stedet for at udskrive værdier, skal du inkrementere en tæller;
  • Vær opmærksom på grænsetilfælde – i delete()-metoden skal du altid tjekke, om index == 0 for korrekt at opdatere head, og sikre at indekset er inden for grænserne, før du fortsætter;
  • Opdater referencer korrekt – når du sletter en node, skal du opdatere current.next = current.next.next for at springe elementet over og dermed fjerne det fra listen.
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();
    }
}
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 7

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

bookUdfordring: Implementering af Size- og Delete-metoder i LinkedList

Stryg for at vise menuen

Opgave

Du har implementeret tre ud af fire CRUD-operationer sammen. I denne opgave skal du implementere to metoder:

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

Opgaven ligger på GitHub, så du skal implementere den lokalt i dit IDE.

Du vil se løsningen på denne opgave med kommentarer til implementeringen.

En kort vejledning til, hvordan du løser denne opgave:

  • Det anbefales at starte med size()-metoden. Først skal du deklarere en variabel til at holde styr på antallet af elementer i listen, og derefter blot returnere denne variabel fra metoden;
  • I size()-metoden skal du følge de samme trin som i display()-metoden. Men i stedet for at udskrive elementerne på skærmen, skal du inkrementere den variabel, du har oprettet;
  • I delete()-metoden skal du sende index som parameter. Det er vigtigt at validere indekset for at sikre, at det er inden for det korrekte interval;
  • Hvis index == 0, skal du blot opdatere referencen ved at sætte head = head.next;
  • Udfør derefter operationer med en for-løkke for at finde det ønskede indeks for elementet;
  • Når det nødvendige element er fundet, skal du udføre følgende operation:
    node.next = node.next.next;;
  • På denne måde fjerner du referencen til det slettede element og sletter det dermed fra listen.

Når du har afsluttet opgaven, kan du køre main-metoden, hvor der er nogle tests til rådighed for dig.

Derudover kan du køre enhedstestene, der ligger i test-mappen, for at validere din løsning.

  • Iterér omhyggeligt – når du implementerer size()-metoden, skal du gennemløbe listen ligesom i display(), men i stedet for at udskrive værdier, skal du inkrementere en tæller;
  • Vær opmærksom på grænsetilfælde – i delete()-metoden skal du altid tjekke, om index == 0 for korrekt at opdatere head, og sikre at indekset er inden for grænserne, før du fortsætter;
  • Opdater referencer korrekt – når du sletter en node, skal du opdatere current.next = current.next.next for at springe elementet over og dermed fjerne det fra listen.
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();
    }
}
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 1. Kapitel 7
some-alt