/ / Aktualizuj górny wpis listy powiązanej - c

Zaktualizuj górny wpis listy łączy - c

Zmierzyłem się z wyzwaniem stworzenia algorytmu do wstawienia na górę listy połączonej. Ustawiłem wskaźnik, aby śledzić początek listy.

#include "Entry.h"

int main(void)
{
struct entry list;
struct entry *listPtr = &list;

list.value = 100;
n1.value = 200;
n2.value = 300;
n3.value = 400;

initList(&list);

struct entry insert;
insert.value = 1000;

update(&insert, &n2);

return 0;
}

Ćwiczenie sugeruje, że mogę użyć metody aktualizacji, aby wstawić nowy wpis na początku listy. Jak mogę to zrobić?

#include <stdio.h>
#include <stdbool.h>

struct entry
{
int value;
struct entry *next;
}n1, n2, n3, end;

void initList(struct entry *list)
{
list->next = &n1;
n1.next = &n2;
n2.next = &n3;
n3.next = &end;
end.value = 0;
}

void update(struct entry *insert, struct entry *after)
{
insert->next = after->next;
after->next = insert;
}

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz łatwo zmienić update funkcja do

struct entry *update(struct entry *insert, struct entry *before, struct entry *after)
{
insert->next = after;
if (before != NULL)
{
before->next = insert;
return before;
}
return insert;
}

gdzie insert to jest wpis do wstawienia, before jest węzłem przed wstawionym, oraz after jest węzłem po tym, który został wstawiony. Funkcja zwraca nowy wpis, jeśli jest wstawiany jako pierwszy wpis, i before Inaczej.

Aby przejść do listy, użyj

list_to_prepend_to = update(node_to_insert, NULL, list_to_prepend_to);

Na przykład w kodzie możesz użyć

listPtr = update(&insert, NULL, &list);

while (listPtr)
{
printf("%dn", listPtr->value);
listPtr = listPtr->next;
}

aby dodać pozycję do listy i wydrukować listę. Aby wstawić na środku listy, nie potrzebujesz wartości zwracanej:

update(&insert, &list, &n1);

To sprawi insert drugi wpis na twojej liście.


0 dla odpowiedzi nr 2

Przekazujesz adres n2 do funkcji aktualizacji. n2 nie jest wierzchołkiem elementu listy. Zostanie wstawiony element b / w n2 i koniec. Aby wstawić element po pierwszym elemencie, najwyższy

aktualizacja (& wstaw i & list);

Aby dodać nowy element do listy

struct entry new_element;

new_element.next = & list;

new_element.value = some_value;