求用邻接链表表示的有向图的转置

发布于 2022-09-02 11:43:34 字数 897 浏览 7 评论 0

算法导论22.1-3有个问题,将有向图转置(原题是邻接链表和邻接矩阵,这里只讨论邻接链表)自己写了个比较复杂,觉得不好。所以去网上找答案,看到的大多跟下面这个类似:

void Transpose(VNode Adj[], VNode newAdj[], int V)
{
    int i;
    for(i = 0; i < V; i++)
    {
        VNode *p = Adj[i].next;
        while(p != NULL)
        {
            newAdj[p->data]->next = (VNode *)malloc(sizeof(VNode));
            newAdj[p->data]->next->data = Adj[i].data;
            newAdj[p->data]->next->next = NULL;
            p = p->next;
        }
    }
}

但我感觉明显不对啊。比如原有向图的邻接链表如下

1 -> 2 ->4
2 -> 5
3 -> 6 ->5
4 -> 2
5 -> 4
6 -> 6

遍历第一个链表时,对于 1 -> 2,可以将新链表的newAdj[2]->next->data = 1; 这没问题。但是后面对于 4 -> 2,newAdj[2]->next已经指向1了,再重新分配内存并赋值为4,不就把之前的1给冲掉了吗?最后的得到的转置有向图每个链表不都最多只有两个元素了吗?

请问哪里有邻接链表转置的好的代码,最好是用c++写的,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

↙温凉少女 2022-09-09 11:43:34

我也想要......如果你找到了,请告诉我

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文