0

如果我有这样的课程:

class Node
{
    string id;
    const Node next;
}

我如何找到链接列表id中最后一个的?Node

string lastID(const Node node)
{
    ???
}
4

2 回答 2

3

我假设你的问题是你需要循环但不能重置你的变量,因为它是 const? 如果您想要一个引用 const 对象但本身可重新分配的对象(即它是 tail-const),那么使用std.typecons.Rebindable. 在这种情况下,这为您提供:

string lastID(const Node node)
{
    import std.typecons;
    Rebindable!(const Node) curr = node;

    while(curr.next)
        curr = curr.next;

    return curr.id;
}

我必须说,我觉得这有点奇怪,尽管你不只是问如何引用一个引用不是 const 本身的 const 对象,因为这就是我所能看到的,你真的在​​这里问,考虑到循环本身是多么简单。就目前而言,您的问题有点过于要求某人为您编写代码而不是提出问题。

于 2012-09-20T05:51:29.923 回答
2

您也可以花哨并使用递归:

string lastID(const Node node)
{
    if(node.next)
        return lastID(node.next);
    return node.id;
}

请记住,如果列表很长,它可能会导致堆栈溢出(据我所知 D 不支持尾调用递归优化)

于 2012-09-20T07:10:10.733 回答