(C++)如何创建一个函数来接收两个排序的链表并返回出现在两个列表中的第三个元素列表
(C++)How do I create a function that receives two sorted linked lists and returns a third list of elements appearing in both lists?
因为这是一个作业,所以我不能使用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();
}
列表.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;
}
struct node
确实在List
的私人部分,
而您提供公共获取者List::node* List::getHead()
.
所以从类之外,我们不能使用 name List::node
. 我们可以使用 auto
来解决这个问题:
void compareLists(const List& L1, const List& L2){
const auto* L1HeadPtr = L1.getHead();
const auto* L2HeadPtr = L2.getHead();
// ...
}
更简单,更直观的是在公共部分中移动结构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*
因为内容可以修改。
假设这是一个学校练习(因为否则,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
}
}
}
相关文章:
- 测试两个类型列表中的所有组合
- 创建一个棋盘格或"Interweave"两个链接列表。IE 更改两个链表的指针
- C++声明双链表,使用两个 for 循环双向遍历列表并打印
- 为什么在排序链表上的这种合并实现总是将两个列表都设置为 NULL,而只有一个应该设置一个列表?
- 我如何创建一个列表,然后从中创建两个列表,其中一个用于偶数,另一个用于奇数?
- C++如果两个模板函数都与参数列表匹配,将调用哪个模板
- 如何在两个列表中比较和获取非包含值
- 如何在构造器的成员初始值设定项列表中调用两个函数?
- 将两个列表合并为一个蛇形列表
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 使用特征查找两个列表之间的差异
- 如何在这两个分类的链接列表之间获得开关的位置
- 如何合并两个双重链接列表(访问下一个链接)
- 通过单词列表将两个字符串移动以比较每个单词
- 添加一个节点,并在通用树中的两个给定节点之间找到路径成本,其中c 中的儿童列表
- 如何比较C 列表中的两个连续元素
- 两个排序的链接列表C 的交点
- 如何在两个包含指针的地图中创建列表
- 合并两个单链接列表以形成第三个列表的功能
- 两个单链列表共享同一个节点和析构函数两次删除相同的内存