可為單向或雙向。本實作繼承雙向鏈結串列,尾節點後繼指向頭節點。維護 m_CurrentNode 與 m_CurrentIndex 實現游標循環:
public class CircularlyLinkedList<T> : DoubleLinkedList<T> {
private DoubleLinkedListNode<T> m_CurrentNode;
private int m_CurrentIndex;
public int CurrentIndex { get { return m_CurrentIndex; } }
public CircularlyLinkedList() : base() { m_CurrentNode = m_Head.Next; m_CurrentIndex = 0; }
public CircularlyLinkedList(T t) : base(t) { m_CurrentNode = m_Head.Next; m_CurrentIndex = 0; }
public T GetCurrent() { /* 空檢查、回傳值 */ }
public T GetNext() { /* m_CurrentNode = m_CurrentNode.Next; 索引++; 若 null 則繞回頭節點、索引歸零 */ }
public T GetPrevious() { /* m_CurrentNode = m_CurrentNode.Prior; 索引--; 若 null 或頭節點則繞回尾節點、索引設為 Count-1 */ }
}
結尾以經典約瑟夫問題作為應用示例(見下一篇)。