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;
}
}