【C】

// 创建一个结点
node* NodeAppend(node* first, void* addr);
// 插入一个结点
node* NodeInsert(node* first, void* addr);
// 对链表切换 Order 的时候重排 Node
node* NodeSort(node* first);
// 在链表中搜寻对应的内容最早的出现
size_t NodeIndex(const node* first, void* addr);
// 获取链表中结点的数量
size_t NodeCount(const node* first);
// 释放单个结点
void NodeRemove(node* nod, node* left);
// 释放链表资源
void NodeRelease(node* first);


【C++】

	class NodeChain {
	public:
		NodeChain(bool need_free);
		~NodeChain();
		Node* Append(const void* addr);
		toheap Node* Append(const char* addr);
		Node* Append(const void* addr, bool onleft, Node* nod = 0);
		void Index(void* content);
		stduint Count() { return node_count; }
		Node* Root() { return root_node; }
		Node* Last() { return last_node; }
		void Remove(const stduint iden);
		void Remove(const void* content);
		void Remove(Node* nod);
		void SetFreeContent(bool need_free);
		void Onfree(void(*fn_free)(void*) = 0, bool need_free = true, bool pass_whole = true) {
			_node_freefunc = fn_free;
			need_free_content = need_free;
			free_pass_whole = pass_whole;
		}
		void Sort();
		void Onsort(bool sorted = true, bool little_to_big = true, int (*fn_compare)(const void*, const void*) = 0) {
            this->sorted = sorted;
            this->little_endian = little_to_big;
            this->_node_compare = fn_compare;
        }
	protected:
		stduint node_count;
		Node* root_node;
		Node* last_node;
		bool need_free_content;
		void(*_node_freefunc)(void*);
		bool sorted;
		bool little_endian;
		bool free_pass_whole;
		int (*_node_compare)(const void* addr0, const void* addr1);// return 0 for equal, 1 for greater, -1 for less
	};

	template <typename type0> class LinearChain {
	public:
		stduint Count();
		type0*& Getval(stduint idx);
	private:
		// ...
	};