This sounds quite an interesting Linked list and so thought of programming it. Here is the code for you to see.

Code: CPP
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

/*
 * Program for single linked list which inserts / deletes
 * data into linked list. The structure of linked list is
 * complex. Instead of just having a link to the shortlink
 * pointer it even stores a refernce to other link
 *
 *
 */


// Structure templates
struct list
{
    int no;
    struct list *shortlink;
    struct list *longlink;
};
typedef struct list node;

node *head = NULL;

void init(node*);
void InsertNode();
void DeleteNode();
void DisplayList();

void main()
{
    char ch = 'n';
    int opt;
    do
    {
        printf("\nEnter your option\n");
        printf("\n1. Insert a node\n");
        printf("\n2. Delete a particular node\n");
        printf("\n3. Display all the nodes\n");
        printf("\n4. Exit the application\n");
        scanf("%d",&opt);
        switch(opt)
        {
        case 1:
            InsertNode();
            DisplayList();
            break;
        case 2:
            DeleteNode();
            DisplayList();
            break;
        case 3:
            DisplayList();
            break;
        case 4:
            ch = 'y';
            break;
        }
    }while(ch != 'y');
    printf("\nDone by \"SHABBIR\"\n");
    getch();
}

void init(node *current)
{
    printf("\nEnter number\n");
    scanf("%d",&current->no);
    current->shortlink = NULL;
    current->longlink = NULL;
}

void InsertNode()
{
    node *newnode;
   
    newnode=(node*)malloc(sizeof(node));

    init(newnode);

    if(head == NULL)
    {
        head = newnode;
    }
    else
    {
        node *current = head;
        node *longlinkedNode = NULL;

        // Move to the end of the link list
        for(int i = 1; current->shortlink!=NULL ; i++)
        {
            if(i % 2 == 0)
            {
                longlinkedNode = current;
            }
            current=current->shortlink;
        }

        if(current->shortlink==NULL)
        {
            newnode->shortlink = current->shortlink;
            newnode->longlink = longlinkedNode;

            current->shortlink = newnode;
        }
    }
}

void DeleteNode()
{
    node* current = head;
    int rno;
    node *newnode,*temp;

    printf("\nEnter the number whose node you want to delete\n");
    scanf("%d",&rno);
    newnode=current;

    if(current->no==rno)
    {
        // Deleting the first node
        newnode=current;
        current=current->shortlink;
        free(newnode);
        head = current;
        return;
    }
    else
    {
        node* longlinkedNode = NULL;

        for(int i = 1; newnode->shortlink->shortlink!=NULL; i++)
        {
            if(i % 2 == 0)
            {
                longlinkedNode = current;
            }         // Checking condition for deletion of
            // all nodes except first and last node
            if(newnode->shortlink->no==rno)
            {
                temp=newnode->shortlink;
                newnode->shortlink=newnode->shortlink->shortlink;
                longlinkedNode->longlink = temp->longlink;
                free(temp);
                head = current;
                return;
            }
            newnode=newnode->shortlink;
        }
        if(newnode->shortlink->shortlink==NULL && newnode->shortlink->no==rno)
        {
            // Checking condition for deletion of last node
            free(newnode->shortlink);
            longlinkedNode->longlink = newnode->shortlink->longlink;
            newnode->shortlink=NULL;
            head = current;
            return;
        }
    }
}

void DisplayList()
{
    node* current = head;

    while(current!=NULL)
    {
        printf("\n %d ",current->no);
        current=current->shortlink;
    }
}
I dont think it was that different a code from what I have posted.