社区讨论

《统计数字(P1097)》这题我用链表有什么问题

题目总版参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mi7z3uqz
此快照首次捕获于
2025/11/21 05:58
4 个月前
此快照最后确认于
2025/11/21 05:58
4 个月前
查看原帖
C
#include<bits/stdc++.h>
using namespace std;
struct node
{
long long data;
int tot;
struct node *next,*before;
};
int main()
{
struct node *head,*p,*t;
int n;
long long a;
scanf("%d%d",&n,&a);
//设首地址及相关参数
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
p->before=NULL;
p->tot=1;
head=p;
t=head;
cout<<t->data<<endl;
//输入剩下的数且寻找合适的位置
for(int i=2;i<=n;i++)
{
scanf("%d",&a);
if(t->data==a) t->tot++;//若a与此时t所指的地址中的参数(t->adta)相同,则tot+1;
else if(t->data>a)      //t->data大于a的情况
{                      
while(t->data>a&&t!=head) t=t->before;
                        //搜索边界
if(t==head&&t->data>a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t;
p->before=NULL;
p->tot=1;
t->before=p;
head=p;
}                       //若此时链表的最小值                        //仍小于a,则                               //新建参数为a的结构
else if(t->data==a) t->tot++;
else
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t->next;
p->before=t;
p->tot=1;
t->next->before=p;
t->next=p;
}                         //若无a,则新建参                           //数为a的结构
}
else                      //t->data小于a的情                          //况
{
while(t->data<a&&t->next!=NULL) t=t->next;
if(t->next==NULL&&t->data<a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
p->before=t;
p->tot=1;
t->next=p;
}                         //若此时链表的最大                          //值仍大于a.......                          //(此后与前相同)
else if(t->data==a) t->tot++;
else
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t;
p->before=t->before;
p->tot=1;
t->before->next=p;
t->before=p;
}
}
}
t=head;
while(t!=NULL)
{
cout<<t->data<<" "<<t->tot<<endl;
t=t->next;                  //输出
}
return 0;
}
好绝望。。。还特意去翻书完成链表。。。 其实第一个WA的测试点我输出结果完全一样。。。 大家可以拷下来自己去试一下

回复

6 条回复,欢迎继续交流。

正在加载回复...