不好意思又来麻烦大家了,链表有关问题

不好意思又来麻烦大家了,链表问题
该链表我想  输入好几个个字符串然后判断他们是不是回文  
前面没问题主要是函数  huiwen那帮我看看问题出在哪  谢谢了   感激不尽
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
int i,l;

void huiwen(char *a);
int main(void)
{
    struct zhifu
    {
        int no;
        char chuan[80];
        char chuan2[80];
        char huiwen;
        struct zhifu *next;
    };
struct zhifu *first = NULL;
struct zhifu *ing = NULL;
struct zhifu *ing2=NULL;
struct zhifu *previous = NULL;
char test='\0';
for(;;)
{
    printf("\n你想继续输入字符数组吗(Y or N)?");
    scanf("%c",&test);
    if(tolower(test)=='n')
        break;
 
    ing=(struct zhifu*)malloc(sizeof(struct zhifu));
 
    if(first==NULL)
        first =ing;
 
    if(previous!=NULL)
        previous->next=ing;
    printf("\n这是第几次定义字符数组:");
    scanf("%d",&ing->no);
    printf("\n请定义第%d次字符数组:",ing->no);
    scanf("%s",ing->chuan);
getchar();   
    ing->next=NULL;
    previous=ing;
    fflush(stdin);
}

for (ing = first; ing != NULL; ing = ing->next) {
printf("%d: %s\n", ing->no, ing->chuan);
}

ing=first;
while(ing!=NULL)
{
    char *p = ing->chuan;
    char *q = ing->chuan2;

   huiwen(q);
   
    ing=ing->next;
   
}
printf("\nafter modified:\n");
for (ing = first; ing != NULL; ing = ing->next) {
printf("%d: %s\n", ing->no, ing->chuan2);
}
return 0;
}
void huiwen(char *a)
{
for(;*a;a++)
{
l=i;
if(*a!=*(a+l))
{printf("\n不是回文");break;}
else 
l=l-1;
}
printf("\n如果前面没有说不是回文,那么该数组为回文");


}

------解决方案--------------------
一个正读和反读都相同的字符序列称为“回文”。X例如“abcba”和“1221”是回文,而“abcde”不是回文。试写一个算法,利用栈的基本运算识别一个以@为结束符的字符序列是否是回文。
int Palindrome_Test(char str[ ])
/* 判别字符串str是否回文序列,是则返回1,否则返回0 */
{
InitStack(s); /*初始化栈s*/
for(i=0;str[i]!=’@’;i++)
Push(s,str[i]);
i=0;
while(!StackEmpty(s))
{
Pop(s,a);
if(a!=str[i++])  return 0;
}
return 1; 
}
 

------解决方案--------------------
调用huiwen函数 应该是huiwen(p)
这个是重写的回文方法,你可以参考下
void huiwen(char *a) 
{
    printf("%s\n", a);