liste c adreese vom vorigen knoten problem

Gast #7243730
Lesenswert?

einen schönen guten abend,

ich habe eine funktion, die einen knoten in einer Liste hinzufügt
1
static void appendNode(node** liste, uint8_t data_u16)
2
{
3
    node* newNode = NULL;
4
    node* temp = NULL;
5
    uint8_t counter_u8 = 0;
6

7
    while(*liste != NULL)
8
    {
9
        counter_u8++;
10
        liste = &(*liste)->next;
11
    }
12
    newNode = malloc(sizeof(*newNode));
13
    if(NULL != newNode)
14
    {
15
        newNode->number_u16 = counter_u8;
16
        newNode->data_u16 = data_u16;
17
        newNode->next = NULL;
18
    }
19

20
    *liste = newNode;
21
}

die Struktur node soll jetzt ein zusätzliches Element bekommen. Neben 
dem next (welches auf den nächsten Knoten zeigt), möchte ich ein prev 
hinzufügen, welches auf den vorigen knoten zeigt.

Aber ist das ohne größeren Umbau dieser funktion überhaupt möglich?
Beim debuggen sehe ich am Anfnagn die Elemente vom ersten Knoten. Nach 
der while-schleife ist das element schon der neue Knoten. Das heißt an 
den vorigen knoten komme ich gar nicht mehr ran?
Gast #7243738
Lesenswert?

Das entscheidende Stichwort, das Du in der Vorlesung offenbar nicht 
mitbekommen hast, lautet "doppelt verkettete Liste" bzw. "doubly linked 
list". Damit solltest Du Deine Hausaufgaben jetzt selber machen können, 
mit etwas nachsehen in Deinen Unterlagen bzw. bei Google.
Gast #7243764
Lesenswert?

1
static void appendNode(node** liste, uint8_t data_u16)
2
{
3
    node* newNode = NULL;
4
    node* temp = NULL;
5
    uint8_t counter_u8 = 0;
6
    while(*liste != NULL)
7
    {
8
        if(*&(*liste)->next == NULL)
9
        {
10
          /* hier ist der letzte knoten bevor die while verlassen wird */
11
        }
12
        counter_u8++;
13
        liste = &(*liste)->next;
14
    }
15
    ... ... ...
16
    ... ... ...
17
}

Jetzt noch ein bisschen Pointer lernen und verstehen was da passiert, 
dann dürfte das auch kein Problem mehr sein.
Gast #7244114
Lesenswert?

Nur mal so aus Interesse

Warum nennt man eine Variable, die 8 Bit breit ist, data_u16?
Also das hier:

uint8_t data_u16

Das führt doch nur zu Problemen, weil man evtl davon ausgeht, dass in 
data_u16 auch 16 Bit breite Werte gespeichert werden können?

Oder hat das einen Sinn?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren