YTU OJ 2205: 链表(线性表)

题目描述

(线性表)设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法 :(要求用最少的时间和最小的空间)
(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次);
(2) 在单链表将比正整数x小的数按递减次序排列;

输入

输入长度:13
输入数据:4 5 7 7 8 10 11 15 15 16 17 20 20
输入x:10

输出

5
8 7 7 5 4

样例输入
7
1 2 3 4 5 6 6
4

样例输出
2
3 2 1

采用C++方式提交

#include <stdio.h>
#include <stdlib.h>
typedef struct Lnode
{
	int data;
	struct Lnode *next;
}LinkNode;
void Creat(LinkNode *&L,int n) //创建链表
{
	L=(LinkNode *)malloc(sizeof(LinkNode));
	L->next=NULL;
	int i;
	LinkNode *p,*r;
	r=L;
	for(i=0;i<n;i++)
	{
		p=(LinkNode *)malloc(sizeof(LinkNode));
		scanf("%d",&p->data);
		r->next=p;
		r=p;
	}
	r->next=NULL;
}
void Print(LinkNode *p,int max) //递归逆序输出
{
	
	if(p->data == max)
		return;
	Print(p->next,max);
	printf("%d ",p->data);
}
void Find(LinkNode *L,int x) 
{
	int sum=0,max;
	LinkNode *p=L->next,*MaxList;
	max=x; //因为存在相同值,所以定义一个变量来保存一次循环中的最大值
	while(p!=NULL)
	{
		if(p->data > max)
		{
			sum++;
			max=p->data;
			MaxList=p;
		}
		p=p->next;
	}
	printf("%d\n",sum);
	Print(L->next,x);
}
int main()
{
    int n,m;
	LinkNode *head;
	scanf("%d",&n);
	Creat(head,n);
	scanf("%d",&m);
	Find(head,m);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值