C语言链表求助
  • 板块题目总版
  • 楼主Seatree
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/3/25 12:24
  • 上次更新2023/10/23 20:35:47
查看原帖
C语言链表求助
819142
Seatree楼主2023/3/25 12:24

题目大概是一个链表含有数字字母和符号以-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]=='-'&&current->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]=='-'&&current->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'&&current->num[0]<='Z')||(current->num[0]>='a'&&current->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'&&current->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;
}
2023/3/25 12:24
加载中...