PTA 7-3 链表倒数n个结点的乘积 (20 分)

    xiaoxiao2022-06-25  463

    本题要求计算单链表倒数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<malloc.h> typedef struct node{ int data; struct node *next; }LinkListNode; LinkListNode* CreateList(int a[],int m) { LinkListNode *node,*head,*p; int i; head = (LinkListNode*)malloc(sizeof(LinkListNode)); p = head; for(i = 0;i<m;i++) { node = (LinkListNode*)malloc(sizeof(LinkListNode)); node->data = a[i]; p->next = node; p = node; } p->next = NULL; return head; } int main() { int m,n;//m为链表结点个数,n为链表倒数结点的数量 int i; scanf("%d %d",&m,&n); int a[m]; for(i = 0;i<m;i++) { scanf("%d",&a[i]); } LinkListNode *head,*p; head = CreateList(a,m); p = head->next; int local = m-n; if(local == m) { printf("0"); return 0; } for(i = 0;i < local;i++) { p = p->next; } int result = 1; for(i = 0;i<n;i++) { result = result * p->data; if(p->next == NULL) { break; } p = p->next; } printf("%d",result); return 0; }

     


    最新回复(0)