Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2022-01-27, 16:36
  #1
Medlem
Rätta mig om jag har fel: En LinkedList innehåller Noder som är ett objekt som pekar till nästa objekt.

Vad betyder det att en nod har en referens till en annan nod?

Kod:
public void addToHead(String data) {
        Node newHead = new Node(data);
        Node currentHead = this.head;
        this.head = newHead;
        if (currentHead != null) {
            this.head.setNextNode(currentHead); // Refererar det nya huvudet till det förra huvudet(?)
        }
    }

Men vad betyder referensen? Hur beskriver jag förhållandet mellan två noder? Har Huvudet (head) något mer i minnet än bara sig själv?

1 -> 2 -> 3 -> null

Hoppas att någon förstår vad det är för svar jag söker.

MvH
Citera
2022-01-27, 16:39
  #2
Medlem
Referenser är värden som anger själva burken, inte innehållet.
Citera
2022-01-27, 16:40
  #3
Medlem
Citat:
Ursprungligen postat av TrollStrategen
Referenser är värden som anger själva burken, inte innehållet.

Överkomplicerar jag? Och vad menar du med burken?
Citera
2022-01-27, 17:05
  #4
Medlem
a-mortals avatar
I en länkad lista så har varje nod en referens till sitt värde och en referens till nästa nod.

Nod {v: 1, next: Nod { v: 2, next: Nod { v: 3, next: null }}}

Det är svårt att först om man inte jämför med en array och om man inte förstår cpu:n och ram-minne.

Det är lättare att byta plats på värden i en LinkedList än att ändra om ordningen i en array.
Citera
2022-01-27, 17:11
  #5
Medlem
Citat:
Ursprungligen postat av 1psykfall
Överkomplicerar jag? Och vad menar du med burken?
Att en nod har en referens till en annan nod beskrivs enklast genom ett exempel.
Kod:
class Node {
     int key;  // Bara för att fylla ut noden med någon form av data
     Node next;   // Här har next en referens till en annan nod
}
Detta är ett vanligt sätt att skapa länkade datatyper typ länkade listor, binära sökträd etc.
Och i ditt fall så är head bara en referens till första noden i den länkade strukturen (listan).
Citera
2022-01-27, 17:18
  #6
Medlem
Citat:
Ursprungligen postat av DieTrolle
Att en nod har en referens till en annan nod beskrivs enklast genom ett exempel.
Kod:
class Node {
     int key;  // Bara för att fylla ut noden med någon form av data
     Node next;   // Här har next en referens till en annan nod
}
Detta är ett vanligt sätt att skapa länkade datatyper typ länkade listor, binära sökträd etc.
Och i ditt fall så är head bara en referens till första noden i den länkade strukturen (listan).

Ja, det är inte hela koden jag har med utan bara en en method som ska skapa en ny nod och göra den till det nya huvudet..

här är Node klassen..

Det jag funderar över är vad referensen består av? Är det bara en plats i minnet?

Kod:
public class Node {
    String data;
    Node next;

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

    public void setNextNode(Node node) {
        this.next = node;
    }

    public Node getNextNode() {
        return this.next;
    }
}
Citera
2022-01-27, 17:22
  #7
Medlem
Citat:
Ursprungligen postat av 1psykfall
Ja, det är inte hela koden jag har med utan bara en en method som ska skapa en ny nod och göra den till det nya huvudet..

här är Node klassen..

Det jag funderar över är vad referensen består av? Är det bara en plats i minnet?

Kod:
public class Node {
    String data;
    Node next;

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

    public void setNextNode(Node node) {
        this.next = node;
    }

    public Node getNextNode() {
        return this.next;
    }
}
Noden pekar på nästa adress, dvs den består av en adress i programmet, kanske lite svårt att förklara men om du kommer få skriva i C kommer du förstå mer. Tänk dig att det finns massa adresser, typ 0x42412
0x42416
0x42420
osv, noden pekar på en adress där värdet finns lagrat.

Det är med andra ord en pointer.
Citera
2022-01-27, 17:23
  #8
Medlem
Citat:
Ursprungligen postat av a-mortal
I en länkad lista så har varje nod en referens till sitt värde och en referens till nästa nod.

Nod {v: 1, next: Nod { v: 2, next: Nod { v: 3, next: null }}}

Det är svårt att först om man inte jämför med en array och om man inte förstår cpu:n och ram-minne.

Det är lättare att byta plats på värden i en LinkedList än att ändra om ordningen i en array.

Kan inte mycket om varken CPU eller ramminne.

Jag var tvungen att prova för att bekräfta. Att ändra om ordningen i an array då.

här byter jag plats få index 0 och 3 i array, dock i javascript.

Kod:
let arr = [1,2,3,4];

const firstNumber = arr[0];
const lastNumber = arr[3];

arr[3] = firstNumber;
arr[0] = lastNumber;

console.log(arr); // prints [4,3,2,1]

Finns mer eleganta sätt kan jag tänka mig, men detta var det första jag kom att tänka ppå.

Nu vet jag inte hur man byter plats i en länkad lista. Kan egentligen mer eller mindre förstå hur man lägger till ett nytt head och en tail.
Citera
2022-01-27, 17:26
  #9
Medlem
Citat:
Ursprungligen postat av XX1
Noden pekar på nästa adress, dvs den består av en adress i programmet, kanske lite svårt att förklara men om du kommer få skriva i C kommer du förstå mer. Tänk dig att det finns massa adresser, typ 0x42412
0x42416
0x42420
osv, noden pekar på en adress där värdet finns lagrat.

Det är med andra ord en pointer.

okej, tack! Är det nödvändigt att kunna förklara detta djupare eller räcker det med att kunna visa, jag kan byta plats på dessa två Noder och hålla reda på dom?
Citera
2022-01-27, 18:49
  #10
Medlem
Citat:
Ursprungligen postat av 1psykfall
okej, tack! Är det nödvändigt att kunna förklara detta djupare eller räcker det med att kunna visa, jag kan byta plats på dessa två Noder och hålla reda på dom?
Jag tror du har överkomplicerat det mer än vad du behöver, om detta är din originella fråga som läraren ställt dig; Vad betyder det att en nod har en referens till en annan nod?

Då svarar du att det betyder att i en nod finns det ett värde, och även en nod som pekar på en annan nod. Det är allt du behöver veta, i detta fall behöver du bara förstå strukturen och hur det fungerar.

Head -> nästa nod - > nästa nästa nod -> osv..

och i varje nod (inkl. headen) finns det ett värde. Du behöver inte gå djupare än så, isådanafall skulle du läst C och varit närmare maskinkod men det verkar du inte läsa just nu.
Citera
2022-01-27, 22:54
  #11
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av 1psykfall
vad betyder referensen?

Vad är en referens är bör du lära dig eftersom det tillhör grunderna för programmering.
Kika här: https://www.freecodecamp.org/news/un...-d49139beb1c4/
Citera
2022-01-29, 09:58
  #12
Medlem
a-mortals avatar
Citat:
Ursprungligen postat av 1psykfall
Kan inte mycket om varken CPU eller ramminne.

Jag var tvungen att prova för att bekräfta. Att ändra om ordningen i an array då.

här byter jag plats få index 0 och 3 i array, dock i javascript.

Kod:
let arr = [1,2,3,4];

const firstNumber = arr[0];
const lastNumber = arr[3];

arr[3] = firstNumber;
arr[0] = lastNumber;

console.log(arr); // prints [4,3,2,1]

Finns mer eleganta sätt kan jag tänka mig, men detta var det första jag kom att tänka ppå.

Nu vet jag inte hur man byter plats i en länkad lista. Kan egentligen mer eller mindre förstå hur man lägger till ett nytt head och en tail.

Oups my bad. Om man tar bort eller lägger till något mitt i en array måste man flytta samtliga tal mot slutet med en loop eller System.arraycopy(...).
I en LinkedList kan man plock bort eller lägga dit en nod i mitten utan att byta värden på massa index.
Kod:
linkedlist.add(2, 1337);

for (int i = 2; i < array.length-1, i++) array[i+1] = array[i];
// PS i java kan inte en vanlig array växa dynamiskt
array[2] = 1337;

System.arraycopy(array, 2, array 3, array.length-3); // tror detta fungerar
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in