前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数据结构】单向循环链表

【数据结构】单向循环链表

作者头像
囍楽云
发布2022-12-26 15:35:46
2310
发布2022-12-26 15:35:46
举报
文章被收录于专栏:囍楽云博客

单向循环链表(首尾相连)

  单链表的一个变形是单向循环链表单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。

  ps:关于类加上object----object类似于一个基础类,协商相当于自定义的类继承了object的功能单向循环链表,在里即使不写,也默认加载obiect。

  链表里:

  a=b表示将a指向b

  代码实现与详解(注释内)

代码语言:javascript
复制
class Node(object):
    """节点"""
    def __init__(self, item):
        self.item = item
        self.next = None
class SinCycLinkedlist(object):
    """单向循环链表"""
    def __init__(self):
        self._head = None
    def is_empty(self):
        """判断链表是否为空"""
        return self._head == None
    def length(self):
        """返回链表的长度"""
        # 如果链表为空,返回长度0
        if self.is_empty():
            return 0
        count = 1#此处区别于单链表,单链表此处count=0
        cur = self._head
        while cur.next != self._head:#尾部等于头部
            count += 1
            cur = cur.next
        return count
    def travel(self):
        """遍历链表"""
        if self.is_empty():
            return
        cur = self._head
        print cur.item,
        while cur.next != self._head:
            cur = cur.next
            print cur.item,
        print ""
    def add(self, item):
        """头部添加节点"""
        node = Node(item)#需要加具体值元素的时候,开始实例化节点,然后加入链表结构
        if self.is_empty():
            self._head = node
            node.next = self._head
        else:
            #添加的节点指向_head
            node.next = self._head
            # 移到链表尾部,将尾部节点的next指向node
            cur = self._head
            while cur.next != self._head:
                cur = cur.next
            cur.next = node
            #_head指向添加node的
            self._head = node
    def append(self, item):
        """尾部添加节点"""
        node = Node(item)
        if self.is_empty():
            self._head = node
            node.next = self._head
        else:
            # 移到链表尾部
            cur = self._head
            while cur.next != self._head:
                cur = cur.next
            # 将尾节点指向node
            cur.next = node
            # 将node指向头节点_head
            node.next = self._head
    def insert(self, pos, item):
        """在指定位置添加节点"""
        if pos  (self.length()-1):
            self.append(item)
        else:
            node = Node(item)
            cur = self._head
            count = 0
            # 移动到指定位置的前一个位置
            while count 
[1]: https://xuan.ddwoo.top/index.php/archives/155/
[2]: https://xuan.ddwoo.top/index.php/archives/154/                
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档