# package ring

`import "container/ring"`

ring实现了环形链表的操作。

## type Ring

    type Ring struct {
        Value interface{} // 供调用者使用，本包不会操作该字段
        // 包含隐藏或非导出字段
    }

Ring类型代表环形链表的一个元素，同时也代表链表本身。环形链表没有头尾；指向环形链表任一元素的指针都可以作为整个环形链表看待。Ring零值是具有一个（Value字段为nil的）元素的链表。

### func New

    func New(n int) *Ring

New创建一个具有n个元素的环形链表。

### func (*Ring) Len

    func (r *Ring) Len() int

Len返回环形链表中的元素个数，复杂度O(n)。

### func (*Ring) Next

    func (r *Ring) Next() *Ring

返回后一个元素，r不能为空。

### func (*Ring) Prev

    func (r *Ring) Prev() *Ring

返回前一个元素，r不能为空。

### func (*Ring) Move

    func (r *Ring) Move(n int) *Ring

返回移动n个位置（n>=0向前移动，n<0向后移动）后的元素，r不能为空。

### func (*Ring) Link

    func (r *Ring) Link(s *Ring) *Ring

Link连接r和s，并返回r原本的后继元素r.Next()。r不能为空。

如果r和s指向同一个环形链表，则会删除掉r和s之间的元素，删掉的元素构成一个子链表，返回指向该子链表的指针（r的原后继元素）；如果没有删除元素，则仍然返回r的原后继元素，而不是nil。如果r和s指向不同的链表，将创建一个单独的链表，将s指向的链表插入r后面，返回s原最后一个元素后面的元素（即r的原后继元素）。

### func (*Ring) Unlink

    func (r *Ring) Unlink(n int) *Ring

删除链表中n % r.Len()个元素，从r.Next()开始删除。如果n % r.Len() == 0，不修改r。返回删除的元素构成的链表，r不能为空。

### func (*Ring) Do

    func (r *Ring) Do(f func(interface{}))

对链表的每一个元素都执行f（正向顺序），注意如果f改变了*r，Do的行为是未定义的。