循环单链表

1. 空表:头结点指向自己

带头结点循环单链表没有 NULL 作为空表标志。空表满足 head->next == head

head head->next = head
head->next = head;

2. 遍历:回到头结点时停止

尾结点的 next 指向头结点,所以遍历条件不能写成 current != NULL

head a1 a2 tail
for (LNode *current = head->next;
     current != head;
     current = current->next) {
    visit(current->data);
}