Witam. Chciałem stworzyć funkcję która łączy dwie listy jednokierunkowe cykliczne w postaci nowej listy. Funkcja powinna zwracać wskaźnik na początek tej nowej listy.
Struktura listy prezentuje się następująco:
struct element
{
int key;
struct element *next;
};
typedef struct element elListy;
typedef elListy *lista;
funkcja natomiast:
lista mergeListCyclic_AnotherList(lista *l, lista *t)
{
int what;
lista *temp, new_list=NULL, head_l, head_t, rest;
temp=&new_list;
head_l=*l;
head_t=*t;
do
{
if((*l)->key < (*t)->key)
{
addItem_toCyclicList_head(temp, (*l)->key);
l=&(*l)->next;
}
else
{
addItem_toCyclicList_head(temp, (*t)->key);
t=&(*t)->next;
}
} while(((*l)->next!=head_l)||((*t)->next!=head_t));
return new_list;
}
Cały problem w tym, że funkcja pomija ostatnie wartości z obu list... z powodu warunku while(((*l)->next!=head_l)||((*t)->next!=head_t)); lecz nie wiem czym go zastąpić. Jakieś pomysły?
I jak przerobić tą funkcję aby łączyła te dwie listy ale bez tworzenia nowej? Żeby skleiła obie i zwróciła wskaźnik na początek tej sklejonej.