本题要求计算单链表倒数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;
}
网友评论