Podział listy jednokierunkowej na dwie podlisty

0

Witam. Mam problem z zagadnieniem opisanym w wątku, a szerzej chodzi o funkcję rozdzielająca na dwie podlisty względem tego czy element jest parzysty bądź nie. Oto kod funkcji

 void podzielListe(dane * head, dane * a, dane * b)
{
	dane * parz = a;
	dane * nParz = b;
	dane * ls = head;

	if(head)
	{
		while(head)
			{
				if(head->a %2)==0)
				{
					if(parz==NULL)
					{
						parz= head;
						parz->next = 0;
					
					}
					else if(parz != NULL)
					{
						dane * p = parz;
						while(p->next)
							p = p->next;

						p->next = head;
						p->next->next = 0;
					}
				}


				head = head->next;
			}
	}
}

a main:

 dane * lbParz = 0;
dane * lbnParz = 0;
podzielListe(one, lbParz, lbnParz);

Jak widać chodzi o to aby nie alokować pamięci na kolejne podlisty ale odwoływać się do listy głównej. Problemem jest ze dla jak na razie istniejacego tylko jednego warunku funkcja zapisuje do lbParz tylko dwa pierwsze elementy listy.
Pozdrawiam

1

Przecież ustawiasz head->next na null (przyjrzyj się dokładnie Twojemu fragmentowi kodu wewnątrz instrukcji warunkowej sprawdzającej parzystość), po czym chcesz jako następny element przetwarzać właśnie head->next, czyli Twój świeżo ustawiony wskaźnik donikąd.

Btw, nie musisz już sprawdzać czy parz nie jest równe null - skoro zacznie się wykonywać else, masz to zagwarantowane z negacji pierwotnego warunku.

0

Sliczne dzięki, pozdrawiam :)

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