生成链表长度比我输入的少2,指针哪里指错了?
程序功能:把一个含有数字,字母,其他字符的链表分成三个,并用原来的空间进行存储,头结点可以另外开辟空间#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
typedef char datatype; //声明类型
typedef struct node
{datatype data;
struct node *next;
}linklist;
char SCAN() //输入函数
{char r;
scanf("%c",&r);
return r;
}
linklist *CREATLIST(int n) //建立链表的函数,参数为n,由用户输入,通过输入函数,获取链表的数据域
{ int i;
linklist *head,*p,*q;
head=NULL;p=NULL;q=NULL;
for(i=0;i<=n;i++)
{
p=(linklist*)malloc(sizeof(linklist));
p->data=SCAN();
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
return head;
}
void PRINT(linklist *head) //打印链表函数
{
linklist *p;
p=head->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
void SEPARATE(linklist *head,linklist **L1,linklist **L2)
{
printf("separate");
linklist *p,*q,*t,*r;
*L1=(linklist*)malloc(sizeof(linklist));//生成数字链表头结点
*L2=(linklist*)malloc(sizeof(linklist));//生成字母链表头结点
r=head->next ; //r遍历整个链表
p=*L1; //p连接数字指针
q=*L2; //q连接字母指针
t=head; //head 作为其他字符的头指针,t用于连接其他字符结点
while(r!=NULL)
{
if(r->data>='0'&&r->data<='9')
{
p->next=r;
p=r;
}
else if((r->data>='a'&&r->data<='z')||(r->data>='A'&&r->data<='Z'))
{
q->next=r;
q=r;
}
else
{
t->next=r;
t=r;
}
r=r->next;
}
p->next=NULL;
q->next=NULL;
t->next=NULL;
}
int main()
{int a;
linklist *head,*L1,*L2;
printf("please input the length of the linklist!\n");
scanf("%d",&a);
printf("please input the data of the linklist!\n");
head=CREATLIST(a);
PRINT(head);
SEPARATE(head,&L1,&L2);
PRINT(head);
PRINT(L1);
PRINT(L2);
while(1);
}
出现的问题 :例如:我输入链表长度为5,输入三个数据后,输入终止并出现运行结果。
那位仁兄帮忙看一下错在哪里了?
是指针指错了吗?