I'm trying to design a generic linked list where each node can store more than one items such as color, shape, and size.

This is what my .h file looks like

```
typedef struct linked{
    char type;
    void * item;
    struct linked * next;
    struct linked * prev;
}LinkedList;

LinkedList * NewLinkedList();
LinkedList * next(Iterator **I);
int hasNext(Iterator *I);
void insertion(LinkedList **a, void *b);
void printStringList(LinkedList *L);
void printIntList(LinkedList *L);
void printDoubleList(LinkedList *L);
void delete(LinkedList *L, void *n);

```

Should I modify the struct by adding void \* item2 and void \* item3 ...? Or is there better ways to do it.

My second question is: do I have to typecast the void pointers every time when I use them? This is my code for `printIntList`

```
void printList(LinkedList *L)
{
    LinkedList *tmp = NULL;
    tmp = L;
    while(L)
    {
        printf("%d\n",*(int*)L->item);
        L=L->next;
    }
}

```

And I have `printIntList`, `printDoubleList` and `printStringList`. Is there any way I can combine them? 

Thanks!