void listcnt(void)
{
 struct LIST *p;

 for( p=top.next; p!=NULL; p=p->next )
 {
  func();
 }
}

void addlist(int val)
{
 struct LIST *new;
 (略)
 new->func=hoge;
}

void hoge(void)
{
 ここでdataをいじる
}

こんな感じのプログラムを書きたいのですが
hoge関数内で生成されたリストの変数を操作するにはどうすればいいのですか