c++ - 如何在一个节点指向多个其他注释的地方创建链表?

标签 c++

与此示例类似:

enter image description here

我想如图所示进行链接列表节点连接,但是我被卡住了,我应该如何进行?

class Node{

public:
    int id;
    int count;
    int *next;
    int *prev;
    Node(int a): id(a), count(0), next(NULL), prev(NULL) {};
    Node(const int & ss, const int &c): id(ss), count( c), next(NULL), prev(NULL) {};

现在,我有了这些以及其他一些setter和getter函数。

最佳答案

该图片是graph adjacency list,其中:

  • 有5个元素的数组,每个图节点一个。
  • 每个数组元素都是相邻节点编号的(单链接)列表。
  • 每个列表元素的值是该图节点相邻的图节点号。
  • 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);
    }
    

    输出:
    1: 2,3,4,
    2: 4,5,
    3: 1,2,5,
    4: 5,
    5: 4,
    

    在实际的应用程序中,您可能想要确保分配的内存不会泄漏(在本示例中为泄漏),或者使用 std::forward_list 或其他标准或第三方容器。

    关于c++ - 如何在一个节点指向多个其他注释的地方创建链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61129890/

    相关文章:

    python - 如何将cpp结构中的字符串转换为python结构

    c++ - 我如何获得二维矩阵的总和?

    c++ - EnumWindows 不能枚举 UAC 窗口?

    c++ - 覆盖 vector 的第一个元素会改变 vector 最后一个元素的内容

    c++ - Windows 中的堆随机化

    c++ - qt3d 窗口内的 Qt Widget

    c++ - 从带有非 ASCII 字符的 wchar_t 创建 v8::String 的安全方法是什么?

    c++ - range_value_t 用于引用类型

    c++ - 如何从远程线程 DestroyWindow?

    c++ - 如何通过捕获在函数中传递 lambda?