Solidity(创建链接列表)中的递归结构定义

时间:2017-10-23 07:23:34

标签: recursion struct linked-list solidity

我主要使用Java进行培训,所以这对我来说从未真正成为一个问题,但我正在尝试在Solidity中为我正在制定的智能合约创建链接列表。在其中,我正在使用这样编写的结构:

struct Node {
    address addr; 
    Node _next;
    Node prev;
}

虽然我仍然在研究是否值得将它保持为单链接或双链接列表,但主要问题是我通过在Node结构中引用Node结构来解决递归结构定义问题。我不确定我的替代品是什么。这只是语言的限制吗?我读过this thread,但我无法确定所给出的答案是否超过“它取决于”。

感谢您的反馈;如果我能提供更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

您可以这样操作(双链表):

pragma solidity ^0.4.24;


contract LinkedList {

    struct Node {       
        string data;
        uint pointPrevNode;
        uint pointNextNode; 
    }

    mapping(uint => Node) public nodes;
    uint public nodeNumber = 0;
    uint public count = 1;

    function setData(string _data) public {
        nodes[count].data = _data;
        assignPointers(count);  
    }

    function assignPointers(uint _count) internal {
        nodes[nodeNumber].pointNextNode = _count;
        nodes[_count].pointPrevNode = nodeNumber;
        nodeNumber = _count;
        count++;
    }

}