#!/usr/bin/env python
# -*- coding: utf-8 -*-

class Node:
    def __init__(self,initdata):
        self.__data = initdata
        self.__next = None

    def getData(self):
        return self.__data

    def getNext(self):
        return self.__next

    def setData(self,newdata):
        self.__data = newdata

    def setNext(self,new__next):
        self.__next = new__next

class Single_Link:
    def __init__(self):
        self.head = Node(None)
        self.head.setNext(self.head)

    def add(self,element):
        temp = Node(element)
        temp.setNext(self.head.getNext())
        self.head.setNext(temp)

    def remove(self,element):
        prev = self.head
        while prev.getNext() != self.head: # 判断一下,头部指针是否已经指向头部实例,此处执行条件为不是空链(如果已经指向,说明已经是空的单链,无法再删除)
            cur = prev.getNext() # 获取头部指向的下一个实例链表块
            if cur.getData() == element:
                prev.setNext(cur.getNext()) # 如果下一个数据就是要删除的,那么把前一个实例指向当前实例指向的实例。
              # 当前数据块不是要删除的,就从头部链表开始,一个一个往后查(此处用与不用else都可以)
            prev = prev.getNext()

    def search(self,element):
        cur = self.head.getNext()
        while cur != self.head:  # 防止空链表,在不是空链表的情况下执行
            if cur.getData() == element:
                return True
            cur = cur.getNext()
        return False  # 如果整个链表查完都没有该数据,就返回失败

    def empty(self):
        return self.head.getNext() == self.head

    def size(self):
        count = 0
        cur = self.head.getNext()
        while cur != self.head: # 防止空链,在不是空链的情况下进行长度计算
            count += 1
            cur = cur.getNext()
        return count

if __name__ == '__main__':
    single_Link = Single_Link() # 创建了一个空循环单链表
    print("单链表 single_Link 创建完成")