This code is not working properly
#include<stdio.h>
#include<stdlib.h>
struct dllnode{
int data;
struct dllnode *next;
struct dllnode *prev;
};
typedef struct dllnode *Ndptr;
struct dllist{
Ndptr head;
Ndptr tail;
};
typedef dllist *Dllist;
void printlist(Dllist L){
Ndptr p = L->head;
while(p!=NULL){
printf("%d\n",p->data);
p = p->next;
}
}
Ndptr newnode(int val){
Ndptr pnew = (Ndptr)calloc(1,sizeof(struct dllnode));
pnew->data = val;
pnew->next = NULL;
pnew->prev = NULL;
return pnew;
}
Dllist make_list(Ndptr pnew) {
Dllist L = (Dllist)calloc(1,sizeof(struct dllist));
L->head =L->tail=pnew;
if (pnew) { pnew->prev=pnew->next=NULL;}
return L;
}
Dllist insert_before_node (Dllist L, Ndptr pcurr, Ndptr pnew){
if (!L) return make_list(pnew);
if (L->head==NULL){ L->head = L->tail = pnew; return L;}
if (!pcurr) return L; /*error*/
pnew->next = pcurr;
pnew->prev = pcurr->prev;
if (pcurr->prev )
pcurr->prev->next = pnew;
else { L->head = pnew;}
return L;
}
int main(){
int i;
int n;scanf("%d",&n);
Ndptr s = NULL;
Ndptr p;
Dllist m=NULL;
while(n--){
scanf("%d",&i);
p = newnode(i);
m = insert_before_node(m,s,p);
Ndptr s = p;
}
printf("\n");
printlist(m);
}
But this code does work. remaining every thing same just change in main function
int main(){
Ndptr p = newnode(4);
Ndptr s = newnode(5);
Ndptr k = newnode(8);
Ndptr l = newnode(12);
Dllist m = NULL;
m = insert_before_node(m,s,p);
m = insert_before_node(m,p,s);
m = insert_before_node(m,s,k);
m = insert_before_node(m,k,l);
printf("\n");
printlist(m);
}
please explain why? again there is change in only main function.
Aucun commentaire:
Enregistrer un commentaire