Есть несколько проблем в коде, который вы упомянули, во-первых здесь
Node *newNode = (Node*)malloc(sizeof(Node));
что за Node
? Вам нужно typedef
struct Node
. Например,
typedef struct Node{
int data;
struct Node *prev;
struct Node *next;
}Node; /* first typedef it */
Node *HEAD,*TAIL;
Во-вторых, здесь
insertFront(tempNode);
вы передаете tempNode
в insertFront()
и изменения с tempNode
в insertFront()
не отражаются в вызывающей функции, поскольку она обрабатывается как вызов по значению. Вам необходимо передать адрес tempNode
. например,
insertFront(&tempNode);
Также myInsert()
должен возвращать newNode
, а не *newNode
.
Попробуйте эту версию:
typedef struct Node{
int data;
struct Node *prev;
struct Node *next;
}Node; /* first typedef it */
Node *HEAD,*TAIL;
Node* myInsert(int); /* declaration */
void insertFront(Node **); /* declaration */
void printNode(Node *); /* declaration */
int main(void){
int temp;
printf(" |-> Insert front : \n");
scanf("%d", &temp);
struct Node *tempNode;
int itr;
printf("enter no of nodes you want to insert onto list \n");
scanf("%d",&itr);
for(int i = 0;i< itr; i++) {
tempNode = myInsert(temp);
insertFront(&tempNode); /* need to pass address else changes in insertFront won't reflect here */
}
printNode(tempNode); /* fun for printing Node info*/
return 0;
}
Node* myInsert(int num){
// create new node
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = num;
newNode->prev = NULL;
newNode->next = NULL;
return newNode;
}
void insertFront(Node **newOne){
if(HEAD==NULL){
printf(" |-> insertFront - HEAD : List empty, adding node - %d.\n", (*newOne)->data);
//newOne->prev = newOne; /* not required as myInsert() already did this */
HEAD = *newOne;
}
else{
// insert front
printf(" |-> insertFront - List : Adding node - %d.\n", (*newOne)->data);
(*newOne)->next = HEAD;
HEAD->prev = (*newOne);
HEAD = (*newOne);
}
}
void printNode(Node *temp) {
while(temp) {
printf("%d\t",temp->data);
temp = temp->next;
}
}