Skip to content

Instantly share code, notes, and snippets.

@crazyrabbitLTC
Created January 18, 2019 18:55
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/8ceded3dfb54824fd8bea5a5b1392abf to your computer and use it in GitHub Desktop.
Save crazyrabbitLTC/8ceded3dfb54824fd8bea5a5b1392abf to your computer and use it in GitHub Desktop.
pragma solidity ^0.5.0;
//import "zos-lib/contracts/Initializable.sol";
//contract LinkedList is Initializable{
contract LinkedList {
event EntryAdded(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 memory _data) public returns (bool){
Node memory node = Node(head, _data);
bytes32 id = keccak256(abi.encodePacked(node.data, length, now));
nodes[id] = node;
head = id;
length = length+1;
emit EntryAdded(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 view returns (bytes32, string memory){
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