Try the following code....

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

typedef struct node
{
        int data;
        struct node *next;
}NODE;
NODE *CreateList()
{
        int total,num,flag=0,i;
        NODE *start,*new,*last;
        printf("\nHow many Nodes? : ");
        scanf("%d",&total);

        start = NULL;
        for (i=0; i<total; i++)
        {
                printf("\nEnter Data : ");
                scanf("%d",&num);

                new = (NODE *)malloc(sizeof(NODE));
                new->data = num;
                new->next = NULL;

                if(flag == 0)
                {
                        start = new;
                        last = start;
                        flag = 1;
                }
                else
                {
                        last->next = new;
                        last = new;
                }
        }
        return start;
}
Show(NODE *head)
{
        NODE *temp;
        temp = head;

        printf("\n");
        if(temp==NULL)
        {
                printf("\nThe list is empty");
                return;
        }
        while(temp != NULL)
        {
                printf(" %d ",temp->data);
                temp = temp->next;
        }
        printf("\n");
}
int Lookup(NODE *start,NODE *end,int num)
{
        NODE *head1,*head2,*mid,*b4mid;
        int found = 0;

        head1 = start;
        head2 = start;

        while( (head2 != end) && (head2->next != end) )
        {
                head2 = head2->next->next;
                b4mid = head1;
                head1 = head1->next;
        }

        mid = head1;
        printf("\nStart = %d, Mid = %d,End = %d, Data = %d",start->data,mid->data,end->data,num);

        if(mid->data < num)
        {
                if(end->data < num || num < start->data) /*Num is beyond range*/
                        found = 0;
                else
                        found += Lookup(mid->next,end,num);
        }
        else if(mid->data > num)
        {
                if(start->data > num)
                        found = 0;
                else
                        found += Lookup(start,b4mid,num);
        }
        else if(mid->data == num)
                found += 1;
        else
                found = 0;

        return found;
}
int BinarySearch(NODE *head,int num)
{
        NODE *start,*mid,*b4mid,*end,*head1,*head2;
        int found = 0;
        head1 = head;
        head2 = head;
        start = head;

        while( (head2!=NULL) && (head2->next != NULL) )
        {
                head2 = head2->next->next;
                b4mid = head;
                head  = head->next;
        }

        mid = head;
        end = head2;
        printf("\nStart = %d, Mid = %d,End = %d, Data = %d",start->data,mid->data,end->data,num);

        if(mid->data < num)
        {
                if(end->data < num) /*Num is beyond range*/
                        found = 0;
                else
                        found += Lookup(mid->next,end,num);
        }
        else if(mid->data > num)
        {
                if(start->data > num)
                        found = 0;
                else
                        found += Lookup(start,b4mid,num);
        }
        else if(mid->data == num)
                found += 1;
        else
                found = 0;

        return found;
}
main()
{
        int val;
        NODE *head;
        head = CreateList();
        Show(head);
        printf("\nTo be searched? ");
        scanf("%d",&val);
        val = BinarySearch(head,val);
        if(val == 1)
        {
                printf("\nData found in a given list\n");
        }
        else
        {
                printf("\nData does not exist in a given list\n");
        }
}