golang container/list库是用带头结点的双向链表(但不循环)实现的,看过源码可能会有思路