1. Create

for (int i = 1; i <= size; i++)
 
    {
        struct node *newnode;
        int val;
 
        newnode = (struct node *)malloc(sizeof(struct node));
 
        printf("Enter data:\n");
        scanf("%d", &val);
        
        newnode->data = val;
 
        if (head == NULL)
        {
            newnode->next = NULL;
            head = newnode;
            end = newnode;
        }
        else
        {
            newnode->next = NULL;
            end->next = newnode;
 
            end = newnode;
        }
    }
}
 

2. Insert

2.1 Insert at beginning

void insert()
{
 
    struct node *newnode;
    newnode = (struct node *)malloc(sizeof(struct node));
 
    printf("Enter data:\n");
    scanf("%d", &newnode->data);
 
    newnode->next = head;
    head = newnode;
 
}

2.2 Insert at end

void insertend()
{
	struct node *temp = head;
    struct node *current;
 
    struct node *newnode;
    newnode = (struct node *)malloc(sizeof(struct node));
 
    printf("Enter data:\n");
    scanf("%d", &newnode->data);
 
	while(temp!=NULL)
        {
            current = temp;    // n-1'th
            temp = temp->next; // n'th
        }
        
        current->next = newnode;
        newnode->next = temp;
}

2.3 Insert at any position

void insert()
 
{
    int p;
    printf("Enter where to insert:\n");
    scanf("%d", &p);
 
    struct node *temp = head;
    struct node *current;
 
    struct node *newnode;
    newnode = (struct node *)malloc(sizeof(struct node));
 
    printf("Enter data:\n");
    scanf("%d", &newnode->data);
  
    if (p == 1)
    {
        newnode->next = head;
        head = newnode;
    }
    else
    {     
        for (int i = 1; i < p; i++)
        {
            current = temp;    // n-1'th
            temp = temp->next; // n'th
        }
        
        current->next = newnode;
        newnode->next = temp;
 
    }
}

3. Delete

void deletion()
{
    int p;
    printf("Enter which position to delete:\n");
    scanf("%d", &p);
 
    struct node *temp = head;
    struct node *current;
 
    for (int i = 1; i < p; i++)
    {
        current = temp;    // n-1'th
        temp = temp->next; // n'th
    }
 
    current->next = temp->next;
    free(temp);
}

4. Traverse

void traversal()
{
    printf("the list:\n");
 
    struct node *temp;
    temp = head;
 
    while (temp != NULL)
    {
        printf("%d\n", temp->data);
        temp = temp->next;
    }
}