我主要使用Java进行培训,所以这对我来说从未真正成为一个问题,但我正在尝试在Solidity中为我正在制定的智能合约创建链接列表。在其中,我正在使用这样编写的结构:
struct Node {
address addr;
Node _next;
Node prev;
}
虽然我仍然在研究是否值得将它保持为单链接或双链接列表,但主要问题是我通过在Node结构中引用Node结构来解决递归结构定义问题。我不确定我的替代品是什么。这只是语言的限制吗?我读过this thread,但我无法确定所给出的答案是否超过“它取决于”。
感谢您的反馈;如果我能提供更多信息,请告诉我。
答案 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++;
}
}