美文网首页
链表倒数n个结点的乘积

链表倒数n个结点的乘积

作者: 鹿与云与雨 | 来源:发表于2019-11-27 15:41 被阅读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;
    }
    

    相关文章

      网友评论

          本文标题:链表倒数n个结点的乘积

          本文链接:https://www.haomeiwen.com/subject/nbipwctx.html