This is a C Program to perform list traversal operation using linked list. This C program to show the basic functions of linked list such as add, delete, append and delete.

#include "stdio.h"
#include "alloc.h"
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<string.h>

create ();
void append();
void add();
void del();
void print();

typedef struct s_list
       {
       int val;
       struct s_list *next;
       }*SLL;

SLL start,last,temp,extra,one;
void checkme();
//check if list is empty if so automatically create it...
void checkme()
{
temp=start;
       if(temp==NULL)    //start==null then goto create
 {
 printf("\n\t\t\t\t Entering creating mode...");
 create();           //okay...
 }
}


// main start here with no arguments...
main()
     {
     int choice;
     clrscr();
     start=NULL;   // always make start node NULL

   MENU:   printf("\n MENU\n\n 1: create\n 2: append\n 3: print\n 4: add\n 5: delete \n 6: exit :_____\b\b\b\b");
   scanf("%d",&choice);

   switch(choice)
    {
    case 1: create();  break;
    case 2: append();  break;
    case 3: print();   break;
    case 4: add();     break;
    case 5: del();     break;
    case 6: exit(0);
    default: printf("\n choice failed...");break;
    }
    goto MENU;
       }

create()
       {
       if(start==NULL)
  {
   start= malloc(sizeof(struct s_list));  //alloc the struct s_list
   printf("\n\t\t\t\t input initilal value:");
   scanf("%d",&start->val); // get init value
   start->next=NULL;     // if you fail to mke this null...garbage list is placed
  }
  else
   {
    printf("\n\t\t\t\t already created...");
   }
 return;
       }




void  append()
      {
 temp=start;   // always give starting of list to temporary
       // so that we can make changes...
  if(temp==NULL)
  {
   printf("\n\t\t\t\t entering creating mode...");
   create();
  }
  else
      {
       last=malloc(sizeof(struct s_list));
       if(last==NULL){printf("\n\t\t\t\t not enough memory...");}
       while(temp->next!=NULL) temp=temp->next;
       printf("\n\t\t\t\t N enter value : ");
       scanf("%d",&last->val);
       last->next=NULL;
       temp->next=last;
      }
 return;
      }


void print()
       {
 checkme(); // always check for list? created or not?
 temp=start;
 printf("\n List ::=>");
 while(temp!=NULL)
    {
     printf("\t%d",temp->val);
     temp=temp->next;
    }
    return;
       }



void add()
     {
 int data;
 checkme();
 temp=start;
 printf("\n\t\t\t\t enter before which :");
 scanf("%d",&data);

 if(data==temp->val)
     {
      printf("\t\t\t\tstart val...");
      last=malloc(sizeof(struct s_list));
      printf("\n\t\t\t\t get the value...:");
      scanf("%d",&last->val);
      last->next=temp;
      start=last;
      return;
    //getch();
     }
 while(temp!=NULL)                       //go upto last node
     {
     if(temp->val==data)         //if found
         {
   printf("\n\t\t\t\t making changes...");
   extra=temp;            //point to that node
   one=temp;              // here i used two ptr "extra and one"
   break;                 //break the loop and work on the same
         }
         temp=temp->next;
         printf("\n\t\t\t\t\t not found..");
        // return;
      }

        temp=start;                    // set temp to start
        while(temp->next!=extra)       //now find upto pointed value or node
      {
       printf("%d",temp->val);
       temp=temp->next;
      }
      last=malloc(sizeof(struct s_list));
      printf("\n\t\t\t\t value : ");
      scanf("%d",&last->val);
//     printf("temp-> %d  *temp-> %d",temp,*temp);
     temp->next=last;    // join prev+new
     last->next=one;     // join prev+new+remaning
      //   return;
       }



void  del()
      {
 int data;//,cnt=0;
 checkme();
 temp=start;
 printf("\n enter number to be deleted :");
 scanf("%d",&data);

 while(temp!=NULL)                             //temp->next for next and temp for the given number
      {
    //cnt+=1;
      if(temp->next->val==data)                 //if you remove ->next next to next value is deleted
        {
  printf("\n\t\t\t\t making changes...");
  extra=temp->next;                      //take the link to be deleted
  temp->next=temp->next->next;           // join the deleted
  free(extra);                           // finally librate the link..
  break;
        }
      // printf("%d\n",cnt);
        temp=temp->next;

    //printf("\n\t\t\t\t\t not found..cnt=%d",cnt);
   // return;
    }
    return;
      }