链表倒数n个结点的乘积

2019-11-27  本文已影响0人  鹿与云与雨

本题要求计算单链表倒数n个结点的乘积。例如,给出单链表1 2 3 4 5,则倒数2个结点的乘积为20。

#include <iostream>
using namespace std;

typedef struct Node           //建立一个节点
{
    int data=-1;
    struct Node* next = NULL;          //指向下一个节点
}Mylist;                   //给节点赋予一个名称以便直接使用,等于(typedef struct Node Mylist;)

void tail_insert(Mylist *node,int a[],int n)         //尾插
{
    int i;
    for (i = 0; i < n; i++)
    {
        Mylist* newlist = new Mylist;        //创建新节点
        newlist->data = a[i];                  //为新节点赋值
        node->next = newlist;             //老列表的结尾值(NULL)赋给新节点
        node = newlist;                 //老列表的结尾指向新节点
    }
}

int multiplication(Mylist *list,int n,int m)            //乘法(遍历)
{
    Mylist* p1 = list;          //将首节点赋给临时节点p1
    int j = 1, i, k;
    if (n == 0)
        {
            j=0;
        }
    else
    {
        for (k=0; k <= (m-n); k++)
        {
            p1 = p1->next;              //先令指针指向需要的数据
        }
        for (i = 0; i < n; i++)
        {
            j = j * p1->data;           //数据相乘
            p1 = p1->next;              //指向下一项
        }
    }
    return j;
}

int main()
{
    int n, m;            //n为倒数节点的数量,m为链表节点的个数
    int i, a[1000] = {0};
    Mylist* head, * root;
    cin >> m >> n;
    for (i = 0; i < m; i++)
    {
        cin >> a[i];
    }
    head = new Mylist;
    root = head;
    tail_insert(head,a,m);
    cout << multiplication(root,n,m);
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读