链表:整数的分类 能帮我修改一下程序吗 求帮忙!!
题目:给定N个数,每个数模M之后得到一个特征值,要求的是按照特征值从小到大输出每一个数,对于特征值相同的数,在输入数据时候,后输入的数先输出。样例:
5 3
7 8 9 10 11
我的程序:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Hn)
struct Hn
{
int num[2];
struct Hn *next;
};
struct Hn* creat(int n,int m)
{
struct Hn * head,*p,*q;
head= NULL;
p= (struct Hn *)malloc(LEN);
scanf("%d",&p->num[0]);
p->num[1]=p->num[0]%m;
head=p;
q=p;
while(n-1)
{
p= (struct Hn *)malloc(LEN);
scanf("%d",&p->num[0]);
p->num[1]=p->num[0]%m;
q -> next = p;
q=p;
--n;
}
q->next =NULL;
return head;
}
struct Hn *fun(struct Hn *head,int N,int M)
{
int j,t,i=0;
struct Hn *p,*k;
if(head!=NULL )
{
if(N==1) return head;
else
{
for(t=M-1;t>=0;t--)
{
p=head;
if(p->num[1]==t)p=head;
else
{
for(j=0;p!=NULL;j++)
{
if(p->next->num[1]==t)
{
i++;
k=p->next;
p->next=k->next;
k->next=head;
head=k;
}
p=p->next;
}
}
}
}
}
return head;
}
int main()
{
int M,N;
struct Hn *head,*q;
scanf("%d%d",&N,&M);
head=creat(N,M);
q=fun(head,N,M);
do
{
printf("%d ",q->num[0]);
q=q->next;
}while(q!=NULL);
printf("\n");
return 0;
}
我的程序在某些样例就不行了
比如
5 3
3 6 9 10 12
还有其他的一些!!!
各位高手帮帮忙? 能帮我修改一下吗? 万分感激!!!
谢谢啊