按您的意思改,那最后一个字母能被检测到吗?
p是p!=NULL;的缩写。
对不礼貌的女生收钱......
if(i==0||p->data!=m);
而且您这个函数在检验字母的位置也有问题,如果是链表第一个字母就是您想要查询的第一个字母,您的程序仍会执行printf("表中无此数据");
另外,您的这个函数有时候没有返回值,这虽然是允许的,但不规范,
int ist_postion(LNODE *head,char ch)
{
LNODE *p=head;
int i=1;
for(;p;p=p->next)
{
if(p->data==ch)
break;
i++;
}
if(p) return i;
else return 0; //用返回0表示查找不到。
}
我运行过了,你的for语句不执行
和我的代码相同:
int list_postion(LNODE * L,char m)
{
LINKLIST p;
int i=0;
p=L;
p=L->next ;
while(p!=NULL)
{i++;
if(p->data!=m)break;
p=p->next;
}
if(i=0)
printf("hasnot data.");
}
else
return i;
}
全部为错误;
那你原来的程序就有问题,
您看下这个吧,我简单写了个:
#include "Stdio.h"
#include "Conio.h"
#include "stdlib.h"
typedef struct node
{
char data;
struct node *next;
}LNODE;
LNODE* creat(LNODE* head);
void print(LNODE* head);
void Free(LNODE *head);
int ist_postion(LNODE *head,char ch);
int main(void)
{
LNODE *head=NULL;
head=creat(head);
print(head);
printf("%d",ist_postion(head,'b'));
Free(head);
getch();
return 0;
}
LNODE * creat(LNODE *head)
{
LNODE *p=NULL,*q=NULL;
char ch=getchar();
while(ch!='#')
{
p=(LNODE *)malloc(sizeof(LNODE));
if(p==NULL)exit(0);
p->data=ch;
p->next=NULL;
if(!head)
{
q=head=p;
}
else
{
q->next=p;
q=p;
}
ch=getchar();
}
return head;
}
void print(LNODE* head)
{
LNODE* p=head;
while(p)
{
putchar(p->data);
p=p->next;
}
}
void Free(LNODE *head)
{
LNODE *p=NULL;
while(head)
{
p=head;
head=head->next;
free(p);
}
}
int ist_postion(LNODE *head,char ch)
{
LNODE *p=head;
int i=1;
for(;p;p=p->next)
{
if(p->data==ch)
break;
i++;
}
if(p) return i;
else return 0;
}