Python实现的单向循环链表功能示例

yizhihongxing

接下来我将为大家详细讲解Python实现的单向循环链表的功能示例。

单向循环链表的基本概念

单向循环链表是指链表中每个节点都保存了下一个节点的地址信息,最后一个节点的地址信息指向第一个节点,形成了一个循环链表。在单向循环链表中,可以从任何一个节点开始遍历整个链表。

实现单向循环链表的关键操作

单向循环链表主要包括增加节点、删除节点、遍历节点、搜索节点等操作。以下是实现单向循环链表的关键操作步骤:

  1. 增加节点:需要创建一个节点类(如Node),并实例化节点对象(如insert_node),将新节点插入到链表中。
  2. 删除节点:找到要删除的节点,并将节点的前一个节点指向节点的下一个节点,从而删除该节点。
  3. 遍历节点:从链表的第一个节点开始,依次遍历链表中的每一个节点,直到遍历整个链表。
  4. 搜索节点:从链表的第一个节点开始,依次遍历链表中的每一个节点,如果找到了指定节点,则返回该节点;否则返回None。

示例说明一:显示链表中的所有节点

代码:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class CircularLinkedList:
    def __init__(self):
        self.head = None

    def add_node(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            new_node.next = self.head
        else:
            current = self.head
            while current.next != self.head:
                current = current.next
            current.next = new_node
            new_node.next = self.head

    def display(self):
        current = self.head
        if self.head is None:
            print("List is empty")
        else:
            while True:
                print(current.data, end=" ")
                current = current.next
                if current == self.head:
                    break

# 创建一个单向循环链表
cll = CircularLinkedList()

# 在链表中增加节点
cll.add_node(1)
cll.add_node(2)
cll.add_node(3)
cll.add_node(4)
cll.add_node(5)

# 输出链表中的所有节点
cll.display()

解释:

上述代码实现了单向循环链表的基本操作,包括增加节点和显示链表中的所有节点。我们首先创建一个空链表,然后使用add_node方法添加节点,最后使用display方法输出链表中的所有节点。运行上述代码,可以得到以下输出:

1 2 3 4 5

说明:

链表中的所有节点成功地被显示出来了。

示例说明二:删除链表中的指定节点

代码:

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class CircularLinkedList:
    def __init__(self):
        self.head = None

    def add_node(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            new_node.next = self.head
        else:
            current = self.head
            while current.next != self.head:
                current = current.next
            current.next = new_node
            new_node.next = self.head

    def remove_node(self, key):
        current = self.head
        if current is not None:
            if current.data == key:
                while current.next != self.head:
                    current = current.next
                current.next = self.head.next
                self.head = self.head.next
            else:
                prev = self.head
                while prev.next != self.head:
                    current = prev.next
                    if current.data == key:
                        prev.next = current.next
                        current = None
                        return
                    prev = prev.next
                if prev.next.data == key:
                    prev.next = self.head

    def display(self):
        current = self.head
        if self.head is None:
            print("List is empty")
        else:
            while True:
                print(current.data, end=" ")
                current = current.next
                if current == self.head:
                    break

# 创建一个单向循环链表
cll = CircularLinkedList()

# 在链表中增加节点
cll.add_node(1)
cll.add_node(2)
cll.add_node(3)
cll.add_node(4)
cll.add_node(5)

# 删除链表中的指定节点
cll.remove_node(3)

# 输出链表中的所有节点
cll.display()

解释:

上述代码实现了单向循环链表的基本操作,包括增加节点和删除链表中的指定节点。我们首先创建一个链表,然后使用add_node方法添加节点,接着使用remove_node方法删除链表中的指定节点,最后使用display方法输出链表中的所有节点。运行上述代码,可以得到以下输出:

1 2 4 5

说明:

节点3已经被删除,链表中的其他节点顺利连接。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现的单向循环链表功能示例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Android实现网易新闻客户端首页效果

    Android实现网易新闻客户端首页效果攻略 在 Android 开发中实现类似网易新闻客户端首页的效果,主要需要涉及以下知识点:ListView,ViewPager,Fragment,自定义View以及网络请求等等。 1. 布局设计 在实现类似网易新闻客户端首页的效果时,我们可以将布局分为两部分:新闻分类导航栏和新闻内容区域。 新闻分类导航栏可以使用 Li…

    other 2023年6月25日
    00
  • pdf文件怎么编辑

    PDF文件是一种最常见和流行的电子文档格式。许多人需要编辑PDF文件,如无意间误删一位数字,需要将文本转换为PDF格式,添加水印等等。以下是关于如何编辑PDF文件的完整攻略。 使用Adobe Acrobat 编辑PDF文件 Adobe Acrobat是一款设计用于PDF文档编辑的软件。用户可以在此软件中进行多种更改,包括转移文本、添加图片、创建表格、更改字体…

    其他 2023年4月16日
    00
  • beautifulsoup官方文档

    BeautifulSoup官方文档 BeautifulSoup是一个Python库,用于从HTML和XML文件中提取数据。它提供了一种简单的方式来遍历文档树,搜索和修改文档内容。以下是BeautifulSoup官方文档的完整攻略。 步骤 以下是BeautifulSoup官方文档的步骤: 访问BeautifulSoup官方文档网站。 阅读文档中的介绍、安装、使…

    other 2023年5月6日
    00
  • janinojaninojava表达式计算引擎案例

    以下是关于Janino Java表达式计算引擎的完整攻略,包括基本知识和两个示例说明。 基本知识 Janino是一个Java编译器,可以将Java源代码译成Java字节码。Janino还提供了一个Java表达式计算引擎,可以在运行时动态计算Java表达式。在使用Janino Java表达式计算引擎之前,需要确保已经安装了Java环境。 示例说明 以下是两个J…

    other 2023年5月7日
    00
  • 如何在excel中创建guid?

    在Excel中创建GUID可以帮助我们生成唯一的标识符,以下是在Excel中创建GUID的详细攻略: 步骤1:打开Excel 首先,我们需要打开Excel,并创建一个新工作簿。 步骤2:打开VBA编辑器 在Excel中,我们可以使用VBA编辑器来创建GUID。要打开VBA编辑器,我们可以按下“Alt”和“F11”键或者单击“开发人员”选项卡中的“Visual…

    other 2023年5月9日
    00
  • Win11系统explorer.exe总是自动重启的解决方法

    当出现电脑系统explorer.exe总是自动重启的问题时,可以尝试以下几个解决方法: 方法1:检查病毒或恶意软件 可能是电脑中存在病毒或恶意软件导致系统出现explorer.exe自动重启的问题。我们可以通过杀毒软件对电脑进行扫描,检查电脑是否存在病毒或恶意软件。下面以360安全卫士为例进行说明: 在电脑中打开360安全卫士软件; 点击软件中的“查杀木马”…

    other 2023年6月27日
    00
  • 崩坏星穹铁道全部光锥选择攻略 光锥培养优先级推荐

    崩坏星穹铁道光锥选择攻略 在崩坏星穹铁道中,光锥是非常重要的资源之一。正确地选择光锥的种类和数量可以大大提升玩家的战斗力。本攻略将介绍如何选择光锥以及光锥培养的优先级推荐。 一、光锥种类选择 在崩坏星穹铁道中,光锥分为攻击、防御和辅助三种类型。根据玩家的需求和实际情况,选择不同的光锥种类是非常重要的。 1.攻击光锥 攻击光锥是增强角色攻击能力的光锥,可加强输…

    other 2023年6月27日
    00
  • java如何实现获取客户端ip地址的示例代码

    获取客户端IP地址是Java Web开发中常见的需求之一。下面是一份完整的攻略,包含了两个示例说明。 示例1:使用HttpServletRequest对象获取客户端IP地址 在Java Web开发中,可以使用HttpServletRequest对象来获取客户端IP地址。以下是一个示例代码: import javax.servlet.http.HttpServ…

    other 2023年7月31日
    00
合作推广
合作推广
分享本页
返回顶部