Here's a program which is found in my text boob of C. I don't know what and how it does the work. When I ran it, it had errors which I rectified somehow.

Code:
#include <stdio.h>
#include <conio.h>

#include <alloc.h>


#define NewNode (Node *) malloc(sizeof(Node))

typedef struct node {

	int item;
	struct node *next;

}Node;

Node * Create(Node *);
void Display(Node *);
int Count(Node *);
Node * Insert(Node *);
Node * Delete(Node *);
void Search(Node *);



void main() {

	Node *start = NULL;
	int ch, cnt;
	clrscr();
	start = Create(start);
	Display(start);

	do {

		printf("\n Singly Linked List Operations \n");

		printf(" 1->  Count\n");
		printf(" 2->  Display\n");
		printf(" 3->  Insert\n");
		printf(" 4->  Delete\n");
		printf(" 5->  Search\n");

		printf("\n Enter a Choice: ");
		scanf("%d", &ch);


		switch(ch) {

			case 1:

				printf("\n No. of Nodes = %d\n", Count(start));
				break;

			case 2:

				Display(start);
				break;

			case 3:

				start = Insert(start);
				break;

			case 4:

				start = Delete(start);
				break;

			case 5:

				Search(start);
				break;

			default:

				printf("\n Invalid Selection\n");

		}

	}while(ch !=0);
}

Node * Create(Node *s) {

	Node *tmp = NULL, *t1 = NULL;
	int num;
	t1 =s;

	do {

		printf("\n Enter the element: ");
		scanf("%d", &num);

		if(num != -99) {

			tmp = NewNode;
			tmp->item = num;
			tmp->next = NULL;

			if(s == NULL)
				s = t1 = tmp;
			else {

				t1->next = tmp;
				t1 = t1->next;
			}

		}

		else {

			printf("\n Linked List Created Successfully\n");
		}
	}while(num != -99);
	return(s);
}

void Display(Node *s) {

	if(s == NULL)
		printf("\n Empty Linked List\n");
	else {
		while(s != NULL) {

			printf("%d", s->item);
			s = s->next;
		}
		printf("\n ");
	}
}

int Count(Node *s) {

	int total = 0;

	while(s != NULL) {

		total++;
		s = s->next;
	}
	return(total);

}

Node * Insert(Node *s) {

	Node *t1 = NULL, *tmp = NewNode;
	int pos;

	printf("\n Enter the position to be inserted \n");
	scanf("%d", &pos);

	if(pos > 0 && pos <= Count(s) + 1) {
		printf("\n Enter the element to inserted\n");
		scanf("%d", &tmp->item);

		if(pos == 1) {
			tmp->next = s;
			s = tmp;
		}
		else {
			t1 = s;
			while(pos > 2) {
				t1 = t1->next;
				pos--;
			}
			tmp->next = t1->next;
			t1->next = tmp;
		}
	}
	else {
		printf("\n Invalid Position\n");
	}

	return(s);
}

Node * Delete(Node *s) {

	Node *t1 = s, *tmp = NULL;
	int pos;
	printf("\n Enter the position to be deleted\n");
	scanf("%d", &pos);

	if(pos > 0 && pos <= Count(s)) {

		if(pos == 1) {
			s = s->next;
			free(t1);
		}
		else {
			while(pos > 2) {
				t1 = t1->next;
				pos--;
			}

		tmp = t1->next;
		t1->next = tmp->next;
		free(tmp);

		}
	}
	else {
		printf("\n Invalid Position\n");
	}
	return(s);
}

void Search(Node *s) {

	int ele;
	int flag = 0;

	printf("\n Enter the element to be searched: ");
	scanf("%d", &ele);

	if(s !=NULL) {

		while(s != NULL) {
			if(s->item == ele) {
				printf("\n%d is present\n", ele);
				flag = 1;
			}
			s = s->next;
		}

		if(flag == 0) {
			printf("\nElement Not Found\n");
		}
	else {
		printf("\nList is Empty. Key Element Can't be searched.\n");
	}
	}
}

Here's the first run of the program:

Code:
C:\node


Enter the element: -99

Linked List Created Successfully

Empty Linked List

Singly Linked List Operations
1->  Count
2->  Display
3->  Insert
4->  Delete
5->  Search

Enter a Choice: 3

 Enter the position to be inserted
1

 Enter the element to inserted
100

 Singly Linked List Operations
 1->  Count
 2->  Display
 3->  Insert
 4->  Delete
 5->  Search

 Enter a Choice:


So, any explanation? My text book doesn't say anything about it.