0001 template <typename T> using LNP = ListNode<T>*; //列表节点位置|List Node Position 0002 template <typename T> struct ListNode { //列表节点模板类(以双向链表形式实现) 0003 T data; LNP<T> pred, succ; //数值、前驱、后继 0004 ListNode() : data(), pred(nullptr), succ(nullptr) {} 0005 ListNode(const T& e, LNP<T> p = nullptr, LNP<T> s = nullptr) 0006 : data(e), pred(p), succ(s) {} //类T已定义复制方法 0007 LNP<T> insertPred(const T& e); //紧靠当前节点之前插入新节点 0008 LNP<T> insertSucc(const T& e); //紧随当前节点之后插入新节点 0009 void movePred(LNP<T> s); //转移到紧靠于s之前 0010 void moveSucc(LNP<T> p); //转移到紧接于p之后 0011 LNP<T> operator+(Rank r); //循秩访问this[r](效率低) 0012 Rank operator-(LNP<T> t); //统计区间[this, t)的长度(效率低) 0013 }; // ListNode