Łączenie 2 list jednokierunkowych cyklicznych

0

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.

1
Sharbat napisał(a):

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?
Bardzo trudno odpowiedzieć na to pytanie, ale spróbuję zobrazować.
Próbowałem rozwiązać równanie kwadratowe Ax^2+Bx+C = 0.
następująco: (A+B+C)/0
Ale wyskakuje mi dzielenie przez zero. Lecz nie wime czym to dzieleniem mam zastąpić.
Jakieś pomysły?

Sharbat napisał(a):

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.

Rzecz jasna trzeba najpierw zrobić to poprawnie.

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