本题要求计算单链表倒数n个结点的乘积。例如,给出单链表1 2 3 4 5,则倒数2个结点的乘积为20。
输入格式:
输入有2行,第一个行为2个非负整数m和n。其中m为链表结点个数,n为链表倒数结点的数量。题目保证计算结果在int范围内。 第二行为链表的m个数,以空格分隔。
输出格式:
在一行中输出倒数n个结点的乘积。
输入样例:
5 2
1 2 3 4 5
结尾无空行
输出样例:
20
结尾无空行
样例解释:
20 = 4 * 5
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
typedef struct node{
int data;
struct node *next;
}node;
node * create(node *head,int m){
node *p;
head=(node*)malloc(sizeof(node));
head->next=NULL;//初始化
for(int i=0;i<m;i++)
{
p=(node*)malloc(sizeof(node));//开内存
scanf("%d",&p->data );
p->next =head->next ;
head->next =p;
}//头插法,这题用头插可直接求逆转后前n个数之积
return head;
}
void chengji(node *head,int n,int m){
node * p= head->next;
int ans=1,flag;
while(p->next != NULL){
if(n!=0)
{
if (flag<n)
{
ans=ans*p->data;
flag ++;
}
}
else
{
ans=0;
}
p=p->next;//遍历
}
printf("%d",ans);
printf("\n");
}
int main(){
int n, m;
node *p, *head;
scanf("%d%d",&m,&n);
head=create(head,m);
chengji(head,n,m);
return 0;
}