Problem jest następujący:
/12. Napisz funkcję, która dla dwóch list jednokierunkowych cyklicznych usunie wszystkie wartości
pierwszej listy w drugiej liście./
#include <stdio.h>
#include <stdlib.h>
typedef struct el
{
int x;
struct el* nast;
struct el* pop;
} elem;
typedef elem* wsk;
void druk(wsk l)
{
wsk p = l;
if (l != NULL)
{
do
{
printf("%d\n", p->x);
p = p->nast;
} while (p != l);
}
else
{
printf("Lista pusta\n");
}
}
void dod(wsk* l, int y)
{
wsk p = (wsk)malloc(sizeof(wsk));
wsk q;
wsk ll = *l;
if (!(*l))
{
p->x = y;
*l = p;
p->nast = *l;
}
else
{
do
{
ll = ll->nast;
} while (ll->nast != *l);
p->nast = ll->nast;
ll->nast = p;
}
}
void usun(wsk* l1, wsk* l2)
{
wsk p = (*l1), q = (*l2), r = NULL;
do
{
do
{
if ((*l2)->x == (*l1)->x)
{
if ((*l2)->nast == (*l2))
{
r = (*l2)->nast;
(*l2)->x = r->x;
(*l2)->nast = r->nast;
free(r);
(*l2) = (*l2);
}
else
{
r = (*l2)->nast;
(*l2)->x = r->x;
(*l2)->nast = r->nast;
free(r);
}
}
q = q->nast;
} while (q->nast != (*l2));
p = p->nast;
} while ((p->nast != (*l1)) && ((*l2) != q));
if ((*l2) == q)
{
// jak lista l2 ma już jeden element
while ((p != *l1) && (*l1 != NULL))
{
if (q->x == p->x)
{
free(q);
*l1 = NULL;
}
else
{
p = p->nast;
}
}
}
else
{
printf("Lista usun jest pusta\n");
}
}
main()
{
wsk l1 = NULL;
wsk l2 = NULL;
int a;
printf("Zapełnianie listy cyklicznej 2\n");
printf("Dodaj:");
scanf("%d", &a);
while (a != 0)
{
dod(&l2, a);
printf("Dodaj:");
scanf("%d", &a);
}
printf("--------------Twoja Lista 2------------------\n");
druk(l2);
printf("Zapełnianie listy cyklicznej (Co usunac?) 1\n");
printf("Dodaj:");
scanf("%d", &a);
while (a != 0)
{
dod(&l1, a);
printf("Dodaj:");
scanf("%d", &a);
}
printf("--------------Twoja Lista 1------------------\n");
druk(l1);
printf("---------------Usuwanie-----------------------\n");
usun(&l1, &l2);
printf("--------------Twoja Lista 2------------------\n");
druk(l2);
system("pause");
}
I nie idzie coś z tym usuwaniem co rusz coś zostawia :(