Lista dwukierunkowa, zwracanie wskaźnika

0

Witam, właśnie kończę pisać listę dwukierunkową i napotkałem taki problem który chyba sam się rozwiązał.
Konkretniej - miałem napisać funkcję begin() i end(), które zwracają odpowiednio wskaźnik do pierwszego i ostatniego elementu listy. Jednak napotkałem problem i nie potrafię zwrócić wskaźnika za pomocą return. Ale po kilku próbach zauważyłem, ze w przypadku funkcji begin() zwraca ona wskaźnik do pierwszego elementu struktury bez użycia czegokolwiek, po prostu przekazując listę jako parametr. Natomiast w przypadku końca listy, w środku funkcji end() utworzyłem nowy wskaźnik typu mojej struktury i przypisałem mu wskaźnik końca listy(tail w moim przypadku).
I to tyle, sprawdzałem kilka razy i funkcja zawsze zwraca poprawny wskaźnik.
Moje pytanie brzmi, jak to zrobić za pomocą return? Próbowałem rzutowania na int, ale mi nie wychodziło. Dzięki z góry za jakąkolwiek pomoc.
W załączniku przesyłam program wynikowy.
Wycięty fragment kodu dla zobrazowania:

#include <stdio.h>
#include <stdlib.h>

struct node{
	struct node *next;
	struct node *prev;
	int dane;
};

struct list{
	struct node *head;
	struct node *tail;
	int count;
};


void init(struct list *lista);
void push_front(int dane, struct list *lista);
void push_back(int dane, struct list *lista);
void insert(int pozycja, int dane, struct list *lista);
void pop_front(struct list *lista);
void pop_back(struct list *lista);
void print(struct list *lista);
void remove(int pozycja, struct list *lista);
void clear(struct list *lista);
int size(struct list *lista);
int isEmpty(struct list *lista);
int begin(struct list *lista);
int end(struct list *lista);


int main(int argc, char *argv[]) {
	struct list *wsk_list=(struct list*)malloc(sizeof(struct list));
	init(wsk_list);
	push_front(12,wsk_list);
	push_front(133,wsk_list);
	push_front(200, wsk_list);
	push_front(100, wsk_list);
	print(wsk_list);
	printf("\nbegin = %d\n", begin(wsk_list));
	printf("\nend = %d\n", end(wsk_list));
	size(wsk_list); 
	return 0;
}

int begin(struct list *lista)
{
	if(lista->head==NULL)
		puts("Brak wskaznika, lista jest pusta");
}

int end(struct list *lista)
{
	if(lista->head==NULL)
		puts("Brak wskaznika, lista jest pusta");
	else
	{
		struct node *element = (struct node*)malloc(sizeof(struct node));
		element = lista->tail;	
	}
}
1

Żeby zwrócić wskaźnik musisz zadeklarować, że funkcja zwraca wskaźnik.

0

Nie wiem czy to co napisałem jest poprawne ale w każdym razie działa, dzięki wielkie!
Pierwszy raz piszę tego typu funkcję i nie pomyślałem nawet wcześniej o tym, czy to miałeś na myśli?

node *begin(struct list *lista);
node *end(struct list *lista);

(...)

node *begin(struct list *lista)
{
	if(lista->head==NULL)
		puts("Brak wskaznika, lista jest pusta");
	else
		return lista->head;
}

node *end(struct list *lista)
{
	if(lista->head==NULL)
		puts("Brak wskaznika, lista jest pusta");
	else
		return lista->tail;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1