Skip to content

Instantly share code, notes, and snippets.

@crazyrabbitLTC
Created December 1, 2018 20:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save crazyrabbitLTC/2c89c82e8bbb2b83c42efff958b7be10 to your computer and use it in GitHub Desktop.
Save crazyrabbitLTC/2c89c82e8bbb2b83c42efff958b7be10 to your computer and use it in GitHub Desktop.
SolidityLinkedList
pragma solidity ^0.4.24;
import "zos-lib/contracts/Initializable.sol";
contract LinkedList is Initializable {
event AddEntry(bytes32 head, string data, bytes32 next);
//Struct will be our Node
struct Node {
bytes32 next;
string data;
}
//Mappping will hold nodes
mapping (bytes32 => Node) public nodes;
//Length of LinkedList (initialize with constructor/initalizer)
uint public length;
//Head of list;
bytes32 public head;
function initialize() initializer public {
length = 0;
}
function addNode(string _data) public returns (bool){
Node memory node = Node(head, _data);
bytes32 id = keccak256(node.data, length, now);
nodes[id] = node;
head = id;
length = length+1;
emit AddEntry(head, node.data, node.next);
}
//popNode
function popHead() public returns (bool) {
//hold this to delete it
bytes32 newHead = nodes[head].next;
//delete it
delete nodes[head];
head = newHead;
length = length-1;
}
//Contract interface
function getNode(bytes32 _node) external returns (bytes32, string){
return (nodes[_node].next, nodes[_node].data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment