Cześć, mam problem z funkcją w Liście dwukierunkowej. Dokładnie chodzi o dodanie elementu na podaną pozycję, bez usuwania elementu który tam był,wszystko to co było na liście ma być plus nowy element który wstawiamy na daną pozycję. Dodaję kod, proszę o pomoc.
#include <stdio.h>
#include <stdlib.h>
struct element {
int x;
struct element *next;
struct element *prev; };
struct lista2 {
struct element *pocz;
struct element *koniec;
int ilosc; };
void dodajtyl(int newx, struct lista2* list){ // dziala
struct element* newel =(struct element*)malloc(sizeof(struct element));
newel->x=newx;
newel->next = NULL;
if(list->ilosc == 0){
list ->pocz=newel;
list->koniec=newel;
newel->prev =NULL;
} else{
newel->prev=list->koniec;
list->koniec->next=newel;
list->koniec=newel;
}
list->ilosc++ ;
}
void dodajnapoczatek(struct lista2 *L, int newx){ //dziala
struct element *p=(struct element*)malloc(sizeof(struct element));
p->x = newx;
p->prev = NULL;
p->next = L->pocz;
L->pocz=p;
L->ilosc++;
if(p->next) p->next->prev = p;
else L->koniec =p;
} //tu nizej problem : (
void dodajNapozycje(struct lista2 *L, int newx, int pozycja){ // ma dodac element na podaną pozycje bez usuwania elementu, który tam stoi
if(pozycja <0 || pozycja > L->ilosc-1){ // I mozliwość
dodajtyl(newx,L); // gdy nie ma takiej pozycji ma dodac na koniec (działa)
return;
}else if(pozycja == 0){
dodajnapoczatek(L,newx); // dodaje na poczatek (działa) II możliwośc
return;
} else { // ( NIE DZIAŁA ) <-- III możliwość
int licznik=0;
struct element *p=(struct element*)malloc(sizeof(struct element));
struct element *temp;
temp=L->pocz;
while( temp != NULL ){
if(licznik == (pozycja -1)){
p->x=newx;
p->next=temp->next;
temp=p;
L->ilosc++;
return;
}
licznik++;
temp= temp->next;
}}
}
void wyswietlStart(struct lista2 *L){
struct element *p = (struct element*)malloc(sizeof(struct element));
printf("\nOd poczatku \n");
p= L->pocz;
while(p!=0){
printf(" %d",p->x);
p=p->next;
}
printf("\n");
}
int menu(){
int nr;
printf("\nMENU: \n");
printf("\n1.Dodaj na podana pozycje\n2.Wydruk listy\n3.Koniec. \n");
printf("\nWybor: ");
scanf("%d",&nr);
return nr;}
int main()
{
struct lista2 *L = (struct lista2*)malloc(sizeof(struct lista2)); // Tworze liste
L->pocz = NULL;
L->koniec = NULL;
L->ilosc = 0;
int newx, pozycja,nr;
do{
nr=menu();
switch (nr){
case 1:
printf("\nDodaj element ");
scanf("%d",&newx);
printf("\n\nz jaka pozycje ");
scanf("%d",&pozycja);
dodajNapozycje(L,newx,pozycja); // ' ma dodawac na podaną pozycje ' element ktory tam byl dalej ma byc na liscie
system("PAUSE");
break;
case 2:
wyswietlStart(L);
//system("PAUSE");
//wyswietla od poczatku
case 3:break ;
}
system("PAUSE");
system("cls");
}while(nr!=3);
return 0;
}