[C] Odwracanie listy dwukierunkowej

Pisząc operację odwracania listy należy najpierw sprawdzić czy przypadkiem lista nie jest pusta – występuje wtedy koniec algorytmu. W przeciwnym razie zapamiętujemy adres pierwszego elementu, a następnie wykonujemy pętle, w której sprawdzamy czy istnieje następnik zapamiętanego elementu. Gdy warunek jest spełniony to wyjmujemy ten element i umieszczamy na początek listy. W końcowym rezultacie pierwszy element staje się ostatnim, a ostatni pierwszym. Struktura, na której będziemy bazować wygląda następująco:

//Struktura z danymi studenta
typedef struct DANE
{
	char* imie;
	char* nazwisko;
}Dane;

//Struktura z listą dwukierunkową
typedef struct STUDENT Student;
struct STUDENT
{
	Dane dane;
	Student* next;
	Student* prev;
};     

Pierwsza struktura składa się z pola imie oraz nazwisko, które są łańcuchami znaków. Natomiast struktura reprezentująca listę posiada pole z danymi ucznia, pole next(następny), które odnosi się do następnego elementu oraz pole prev(poprzedni), który odnosi się do poprzedniego elementu.

void odwracanie_listy(Student **head)
{
	Student *tmp, *pom;
	if (head == NULL)
		printf("Brak elementow");
	else
	{
		tmp = *head;
		while (tmp->next != NULL)
		{
			pom = tmp->next;
			tmp->next = pom->next;
			if (pom->next != NULL)
				pom->next->prev = tmp;
			pom->next = *head;
			*head = pom;
		}
	}
}

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *