看来看来,还是以下这个实现最优雅。。

其它的,要么NODE冗余,要么初始化丑陋。。。

#!/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, newnext):
    self.__next = newnext

class SinCycLinkedlist:

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

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

  def remove(self, item):
    prev = self.head
    while prev.getNext() != self.head:
      cur = prev.getNext()
      if cur.getData() == item:
        prev.setNext(cur.getNext())
      prev = prev.getNext()

  def search(self, item):

    cur = self.head.getNext()
    while cur != self.head:
      if cur.getData() == item:
        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__':
  s = SinCycLinkedlist()
  print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))
  s.add(19)
  s.add(86)
  print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))
  print('86 is%s in s' % ('' if s.search(86) else ' not',))
  print('4 is%s in s' % ('' if s.search(4) else ' not',))
  print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))
  s.remove(19)
  print('s.empty() == %s, s.size() == %s' % (s.empty(), s.size()))

最新文章

  1. USACO翻译:USACO 2014 JAN三题(2)
  2. Windows环境下使用Clover四叶草引导双硬盘安装OSX 10.11.5原版镜像
  3. form上传文件以及跨域异步上传
  4. CSU 1328 近似回文词(2013湖南省程序设计竞赛A题)
  5. 为什么移动Web应用程序很慢(译)
  6. WP8.1 Study2:MapControl控件的应用
  7. 解决chrome同步问题
  8. HashCode equals
  9. 暴力破解UltraEdit v21 无需注册
  10. 安装IntelliJ IDEA JetGroovy(转)
  11. JSP网站开发基础总结《九》(转)
  12. Hyperledger Fabric 1.0 从零开始(一)——吐槽
  13. Alpha第八天
  14. 关于HTTP中GET与POST的区别
  15. iOS开发,改变系统铃声音量和静音,并非媒体播放音量
  16. js 性能篇--dom 重绘 重排 节流
  17. Django-rest-framework 接口实现 认证:(auth | authentication)
  18. swift 实践- 05 -- UITextField
  19. EAS开发报错 :数据库表 或 视图 不存在
  20. gulp使用 笔记

热门文章

  1. 在win下面使用cdt+cygwin+cmake
  2. 判断IFeatureClass图形是否含有Z值信息,若有为IPoint赋Z值
  3. Bootstrap学习笔记(一) 排版
  4. 函数 swap
  5. Libcurl笔记三
  6. 《JSON必知必会》
  7. lex&yacc3
  8. HTML5之图形变换
  9. Adobe Dreamweaver CS6 序列号 注册码(转自91zcm)
  10. 【转】DataGridView绑定数据源的几种方式