题目大概是一个链表含有数字字母和符号以-1结尾,拆分为三个链表,在我的Dev上可以运行,但是OJ说运行错误,请大佬帮忙看看哪里出了问题。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct linkList{
char num[8];
struct linkList * next;
};
//初始化链表函数
struct linkList * Init_linkList(struct linkList * head,int * N)
{
struct linkList * new,* previous;int i=0;
char number[8]={'\0'};
head=malloc(sizeof(struct linkList));
previous=head;
scanf("%s",number);
while(number[0]!='-'||number[1]!='1')
{
new=malloc(sizeof(struct linkList));
for(i=0;i<7;i++)
{
new->num[i]='\0';
}
strcpy(new->num,number);
new->next=NULL;
previous->next=new;
scanf("%s",number);
//getchar();
*N=*N+1;
//移动指针
previous=previous->next;
}
new=malloc(sizeof(struct linkList));
new->num[0]='-';new->num[1]='1';
previous->next=new;
new->next=NULL;
return head;
}
//链表排序
void Order_linkList(struct linkList * head,int n)
{
struct linkList *previous,*current;
int i,j;
for(i=0;i<n-1;i++)
{
previous=head;
current=head->next;
for(j=0;j<n-i-1;j++)
{
struct linkList * p_Next=current->next; if(strlen(current->num)>strlen(p_Next->num)||strcmp(current->num,p_Next->num)>0)
{
struct linkList * temp;
temp=p_Next->next;
p_Next->next=current;
current->next=temp;
previous->next=p_Next;
previous=previous->next;
}
else
{
current=current->next;
previous=previous->next;
}
}
}
}
//输出链表
void Output_linkList(struct linkList * head,char name)
{
struct linkList * previous,* current;
previous=head;
current=head->next;
if(current->num[0]=='-'&¤t->num[1]=='1')
{
printf("There is no item in %c list.\n",name);
}
else
{
printf("The list %c is:",name);
while(current->num[0]!='-'||current->num[1]!='1')
{
//printf("%c",current->num[0]);
//printf("%c",current->num[2]);
printf("%s",current->num);
previous=previous->next;
current=current->next;
if(current->num[0]=='-'&¤t->num[1]=='1')
printf("\n");
else
printf(" ");
}
}
}
//释放链表函数
void Free_linkList(struct linkList * head)
{
struct linkList * previous,*current;
previous=head;
current=previous->next;
while(current!=NULL)
{
free(previous);
previous=current;
current=current->next;
}
free(previous);
}
int main()
{
struct linkList *headL,*headA,*headB,*headC,*previous,*current,*previousX,*new;
headA=malloc(sizeof(struct linkList));
headB=malloc(sizeof(struct linkList));
headC=malloc(sizeof(struct linkList));
//X为A、B或C
int n=0;
int * N;
N=&n;
//初始化L序列
headL=Init_linkList(headL,N);
//链表排序
Order_linkList(headL,n);
previous=headL;
current=headL->next;
previousX=headA;
//分离A
while(current->num[0]!='-'||current->num[1]!='1')
{
if((current->num[0]>='A'&¤t->num[0]<='Z')||(current->num[0]>='a'&¤t->num[0]<='z'))
{
previousX->next=current;
previous->next=current->next;
current->next=NULL;
previousX=previousX->next;
current=previous->next;
}
else
{
previous=previous->next;
current=previous->next;
}
}
new=malloc(sizeof(struct linkList));
new->num[0]='-';new->num[1]='1';
new->next=NULL;
previousX->next=new;
current=headL->next;
previous=headL;
previousX=headB;
//分离B
while(current->num[0]!='-'||current->num[1]!='1')
{
if(current->num[0]>='0'&¤t->num[0]<='9')
{
previousX->next=current;
previous->next=current->next;
current->next=NULL;
previousX=previousX->next;
current=previous->next;
}
else
{
previous=previous->next;
current=previous->next;
}
}
new=malloc(sizeof(struct linkList));
new->num[0]='-';new->num[1]='1';
new->next=NULL;
previousX->next=new;
//L中剩下的分给C
headC->next=headL->next;
headL=NULL;
//输出
Output_linkList(headA,'A');
Output_linkList(headB,'B');
Output_linkList(headC,'C');
//释放
Free_linkList(headL);
Free_linkList(headA);
Free_linkList(headB);
Free_linkList(headC);
return 0;
}