Так что, я думаю, ваша самая большая проблема - составить этот список ...
Так я бы сделал эти функции.
#include<stdio.h>
#include<stdlib.h>
typedef struct node {
int data;
int key;
struct node *next;
} node;
node *new_node(int key, int data)
{
node * n =malloc(sizeof(node));
if(!n)
{
fprintf(stderr,"malloc failed");
exit(EXIT_FAILURE);
}
n->data = data;
n->key = key;
n->next = NULL;
}
node *insert_middle(node *next, int key, int data)
{
node *new = new_node(key,data);
new->next = next;
return new;
}
node * insert_node(node *n, int key, int data)
{
if(!n)
{
return new_node(key, data);
}
else if(n->data < data)
{
n->next = insert_node(n->next, key, data);
}
else
{
return insert_middle(n, key, data);
}
}
int main()
{
node *head=NULL;
node *tmp = NULL;
int i,j;
for(i=0;i<10;i++)
{
scanf("%d",&j);
tmp = insert_node(head, 0, j);
//keep track of the head
if(tmp!=head)
head = tmp;
}
printf("====================");
while(head)
{
printf("%d\n",head->data);
head=head->next;
}
return 0;
}
Некоторые ошибки в вашем коде, которые я нашел:
for (key = 0; key < 20 ; key++)
{
//you never change the value of data
data = test[0];
if ( head_countries == NULL || key == 2 )
{
//you should place curr = insertFirst(key, data);
//the way you have written the code nothing happens
//inserFirst function just return the vale and you don't store it anywhere so you can not use it
insertFirst( key, data );
}
else
{
curr = head_countries;
//after this line of code curr=NULL in first iteration
//curr->next will cause SIGSEGV since curr=NULL, so NULL->next is not possible
while ( curr->next != NULL )
{
//printf("%d", key);
if ( curr->data < data && curr->next->data > data )
{
insertAfter(curr, key, data);
}
if ( data == curr->data )
{
//insertAfter(curr, key, data);
}
curr = curr->next;
}
Слишком много ошибок ... Я думаю, вам следует начать заново.Если вы не понимаете мой пример, просто прокомментируйте, и я сделаю все возможное, чтобы объяснить