Well you do need three head pointers if you're creating three seperate lists. So I'm not really sure why you're having problems.
Code:
struct node *list1, *list2, *list3, *temp;
... do fun stuff ...
temp = extractnode( &list1, somevalue ) /* Pull some node from list1. */
if( temp )
{
addnode( &list2, temp ); /* Put this node on/in list2. */
}
temp = extractnode( &list2, someothervalue ); /* Pull some node from list2. */
if( temp )
{
addnode( &list3, temp ); /* Put this node on/in list3. */
}
freelist( list1 );
freelist( list2 );
freelist( list 3 );
Now all you have to do is write the appropriate functions.
Quzah.