原题目是:Calculate the average of all unique data in a LLL
题目中的LLL就是linear linked list,翻译成就是单链表。
至于单链表的知识点,小编就不在此介绍了。
下面是代码展示
//This is the list.h
#include<iostream>
#include<cctype>
#include<cstring>
using namespace std;
struct node
{
int data;
node * next;
};
class list
{
public:
//These funtions are already writter to you
list(); //supplied
~list(); //supplied
void build(); //supplied
void display(); //supplied
//Average all the unique data in the LLL
float average_unique();
private:
//Average all the unique data in the LLL
float average_unique(node * head, node * current, int & num);
int average_unique(node * head, int num);
};
解释一下,在.h文件里,在private session,参数num 为什么要return by reference? 因为这个num是专门将所有的unique data求和的结果存储起来的。
下面是展示如何用递归来实现这个功能:
//This is the list.cpp file
#include "list.h"
float list::average_unique()
{
int num = 0;
float result = average_unique(head,head,num);
return float(num / result);
}
float list::average_unique(node * head, node * current, int & num)
{
if(!head || !current)
return 0.0;
if(average_unique(head,current->data) == 1)
{
cout<<current->data<<" ";
num += current->data;
return average_unique(head,current->next,num) + 1;
}
return average_unique(head,current->next,num);
}
int list::average_unique(node * head, int num)
{
if(!head)
return 0;
if(head->data == num)
return average_unique(head->next,num) + 1;
return average_unique(head->next,num);
}
如果大家会如何找到unique data,那么这儿将所有的unique data进行average,那应该不是很难,就是添加一点运算。
下面是运行结果展示:
这就是如何实现这个功能的代码。