Mam problem ze swoim programem, a konkretnie z pewnym segmentem odpowiedzialnym za usuwanie powtórek z listy jednokierunkowej. Wklejam poniżej kod, żeby było widać o co chodzi.
#include <stdio.h>
#include <stdlib.h>
typedef struct lista{
int x;
struct lista * next;
} element;
element * dodajliczbe(element * head, int a, int b, int n);
element * usun ( element * head);
void wypisz ( element * head );
int main(int argc, char *argv[])
{
element * head=NULL;
dodajliczbe (head, 0, 10, 10);;
usun(head);
wypisz (head);
system("PAUSE");
return 0;
}
element * dodajliczbe (element * head, int a, int b, int n){
int x;
element * wsk=NULL;
wsk=(element*)malloc(sizeof(element));
int i;
for(i=0; i<n; i++){
if(head==NULL){
x=rand()%(b-a+1)+ a;
wsk->x=x;
printf("%d\n", wsk->x);
}
else{
x=rand()%(b-a+1)+ a;
wsk->x=x;
wsk->next=head;
printf("%d\n", wsk->x);
head=wsk;
}
} printf("\n druga funkcja\n");
return head;
}
element * usun ( element * head){
if (head != NULL){
element * tmp1=head;
element * tmp2=head->next;
element * tmp3=tmp2;
for( ;tmp1!=NULL; tmp1=tmp1->next){
for( ;tmp2!=NULL; tmp2=tmp2->next){
tmp3=tmp2;
if(tmp1->x == tmp2->x){
tmp3=tmp3->next;
if(tmp1->next=tmp2)
tmp1->next=tmp3;
free(tmp2);
tmp2=tmp3;
}}}}
return head;
}
void wypisz ( element * head ){
element * tmp=head;
while(tmp!=NULL){
printf("%d\t", tmp->x);
tmp=tmp->next;
}
}
nie wiem czy funkcja tworząca listę działa dobrze, bo gdy próbuje tylko wypisać listę drugi raz ( bez funkcji usuń, tylko funkcją wypisz) to wypisuje mi same zera i wpada w jakąś nieskończoną pętle 0_0...proszę o jakąś radę, bo męczę się z tym i nie wiem co jest nie tak. Jeszcze mam takie pytanie, skoro już założyłem ten wątek. Musze zmodyfikować ten program tak aby te liczby, które są generowane były zapisywane do pliku. I mam taki dylemat czy użyć trybu tekstowego czy binarnego? Kiedy lepiej jest stosować jeden, a kiedy drugi? Z góry dziękuje za jakąkolwiek pomoc.