一个线性链表分割成为三个循坏链表 问题
一个线性链表分割成为三个循坏链表 问题原题目:已知由一个线性链表表示中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写程序将该线性链表分割成为三个循坏链表,其中每个循坏链表表示的线性表中均只含一类字符。
小弟莱鸟我的程序是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct LNode {
char data;
struct LNode *next;
}LNode, *LinkList;//定义单链表
typedef struct cnode {
char data;
struct LNode *next;
}cnode, *CiList;//定义循坏链表
LinkList creat(LinkList head)
{
LinkList l, q, p;//用指针类型定义三个节点类型的指针
int ch;
l = (LinkList)malloc(sizeof(LNode));//分配内存空间
l->data = 0; //为头结点的数据域赋值,值为0
l->next = NULL; //指明下一个结点目前不存在
q = l; //q为游动指针,链表结点的连结要用
printf("Input the Incremental s:\n");
scanf("%c",&ch);
while (ch != 0) //输入0,表示输入结束
{
p = (LinkList)malloc(sizeof(LNode)); //为新输入的数据分配内存空间
p->data = ch;
p->next = NULL; //新输入的节点在链表的最后,即它的后面没有其他元素
q->next = p; //q用于将上一个元素链接至当前新元素
q = p; //q自己移到当前最后一个元素,以备继续链接所用
scanf("%c",&ch);
}
q = l;//输入整个链表前,先将q移到链表头,l一般不动
return q;
}
void LinkList_Divide(LinkList L,CiList A,CiList B,CiList C)
//将线性链L表分割成为三个循坏链表A、B、C
{
CiList l;
CiList p, q, r;
char s;
A = (CiList)malloc(sizeof(cnode));
p = A;
B = (CiList)malloc(sizeof(cnode));
q = B;
C = (CiList)malloc(sizeof(cnode));
r = C; //建立头结点
while ( L )
{
s = L->data;
l = (CiList)malloc(sizeof(cnode));
if ( !l )//检查内存指针
exit(0);
l->data = s;//创建结点内容
l->next = NULL; //设置指针初值
if ( isalpha (l->data) )//如果测试l->data为数字字符时
{
l->next = p->next;//新结点指向下一个结点
p->next = l;//前一结点指向新结点
free(l);//释放l结点内容,以便下一次用
// p = A;
}
else if ( isdigit (l->data) )//如果测试l->data为字母字符时
{
l->next = q->next;//新结点指向下一个结点
q->next = l;//前一结点指向新结点
free(l);//释放l结点内容,以便下一次用
// q = B;
}
else//如果测试l->data为其他字符时
{
l->next = r->next;//新结点指向下一个结点
r->next = l;//前一结点指向新结点
free(l);//释放l结点内容,以便下一次用
// r = C;
}
L = L->next;//指示下一个内容
}
p->next = A;
q->next = B;
r->next = C; //完成循环链表
}
void PrintCList ( CiList head )
//打印循坏链表
{
CiList ptr;
ptr = head;
do
{
printf("%c",ptr->data);
ptr = ptr->next;
} while ( head != ptr && head != head->next);
printf("\n");
}
void main()
{
LinkList L = NULL;
CiList A = NULL, B = NULL, C = NULL;
creat ( L );
LinkList_Divide(L, A, B, C);
PrintCList ( A );
PrintCList ( B );
PrintCList ( C );
}
可我的程序总是被编译器提示出现这样的错误:
cannot convert from 'struct cnode *' to 'struct LNode *'
为什么会这样呢?~~我上网找了很多,但都不能找到,在这向各位请教~
为什么会这样?怎样修改?