因为这是一个赋值,所以我不能使用STD :: List。
Struct List :: Node是私有的,因此我无法从compareLists函数访问它。如何使用getHead()函数将每个列表的头指针传递给我可以用来浏览列表的变量?
#include <iostream>
#include <cstdlib>
#include<list>
#include "List.h"
using namespace std;
void compareLists(List L1, List L2){
List::node* L1HeadPtr = L1.getHead();
List::node* L2HeadPtr = L2.getHead();
}
List.h:
#ifndef LIST_H
#define LIST_H
class List {
private:
struct node {
int data;
node* next;
};
node* head;
node* curr;
node* temp;
public:
List();
void AddNode(int addData);
void DeleteNode(int delData);
void PrintList();
node* getHead();
};
#endif // LIST_H
单独的文件:
#include <cstdlib>
#include <iostream>
#include "List.h"
using namespace std;
List::List(){
head = NULL;
curr = NULL;
temp = NULL;
}
List::node* List::getHead(){
return head;
}
答案 0 :(得分:0)
假设这是一个学校练习(因为否则,USE std::list
),这是发布迭代器的经典案例,如下所示:
List::node* List::NextNode(List::node* curr) {
return (curr == NULL) ? head : curr->next;
}
并在compareLists
中使用它:
void compareLists(List L1, List L2) {
List::node* iter1 = NULL;
List::node* iter2 = NULL;
while ((iter1 = L1.NextNode(iter1)) != NULL &&
(iter2 = L2.NextNode(iter2)) != NULL)
{
if (iter1->data == iter2->data) {
// Use shared item
}
}
}
答案 1 :(得分:0)
struct node
确实属于List
的私人部分,
而你提供公共吸气者List::node* List::getHead()
。
因此,从课堂外部,我们不能使用名称List::node
。我们可以使用auto
:
void compareLists(const List& L1, const List& L2){
const auto* L1HeadPtr = L1.getHead();
const auto* L2HeadPtr = L2.getHead();
// ...
}
更简单,更直观的是在公共区域中移动struct List::node
(正如您提供的getHead()
):
class List {
public:
struct node {
int data;
node* next = nullptr;
};
private:
node* head = nullptr;
public:
List();
void AddNode(int addData);
void DeleteNode(int delData);
void PrintList() const;
node* getHead();
};
但遗憾的是,在您的getter getHead()
中,您打破了类的封装,因为node*
内容可以修改。