[英]How can I create a linked list where one node is pointing to more than one other note?
该图片是一个图形邻接列表,其中:
Node* adjacency_list[5]
足以代表这一点。
工作示例:
#include <iostream>
class Node {
public:
int id;
Node *next;
Node *prev;
Node(int a): id(a), next(0), prev(0) {}
};
Node* make_list(std::initializer_list<int> ids) {
Node* head = 0;
Node** ptail = &head;
for(int id : ids) {
*ptail = new Node(id - 1);
ptail = &((**ptail).next);
}
return head;
}
void print_list(Node** heads, int count) {
for(int i = 0; i < count; ++i) {
std::cout << (i + 1) << ": ";
for(Node* n = heads[i]; n; n = n->next)
std::cout << (n->id + 1) << ',';
std::cout << '\n';
}
}
int main() {
Node* adjacency_list[5] = {};
adjacency_list[1 - 1] = make_list({2, 3, 4});
adjacency_list[2 - 1] = make_list({4, 5});
adjacency_list[3 - 1] = make_list({1, 2, 5});
adjacency_list[4 - 1] = make_list({5});
adjacency_list[5 - 1] = make_list({4});
print_list(adjacency_list, 5);
}
Output:
1: 2,3,4,
2: 4,5,
3: 1,2,5,
4: 5,
5: 4,
在实际应用程序中,您可能希望确保分配的 memory 不泄漏(在本例中泄漏)或使用std::forward_list
或其他一些标准或第 3 方容器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.