python中的单向链表实现

yizhihongxing

实现链表需要定义节点类,节点类包含每个节点的值和指向下一个节点的指针。链表类需要有一个指向链表头节点的指针。

定义节点类

节点类包含__init__方法和__str__方法。

__init__方法用于初始化节点的值和指针。

__str__方法用于打印节点。

class Node:
    def __init__(self, value):
        """
        初始化节点
        """
        self.value = value
        self.next = None

    def __str__(self):
        """
        打印节点
        """
        return f'{self.value}'

定义链表类

链表类包含__init__方法和__str__方法。

__init__方法初始化链表头节点。

__str__方法遍历整个链表并打印每个节点的值。

class LinkedList:
    def __init__(self):
        """
        初始化链表,设置链表头节点为None
        """
        self.head = None

    def __str__(self):
        """
        遍历链表并打印每个节点的值
        """
        lst = []
        current = self.head
        while current:
            lst.append(str(current))
            current = current.next
        return '->'.join(lst)

添加节点

可以向链表中添加节点。添加节点时需要判断链表是否为空。如果链表为空,需要将新节点设置为链表头节点;如果链表非空,需要找到链表尾节点并将其指向新节点。

class LinkedList:
    # ...

    def add(self, value):
        """
        向链表中添加节点
        """
        # 链表为空,设置链表头节点
        if not self.head:
            self.head = Node(value)
            return

        # 链表非空,找到链表尾节点并将其指向新节点
        current = self.head
        while current.next:
            current = current.next
        current.next = Node(value)

删除节点

可以从链表中删除节点。删除节点时需要判断链表是否为空。如果链表为空,无法删除节点;如果链表非空,需要找到要删除节点的前一个节点并将其指向要删除节点的下一个节点。

class LinkedList:
    # ...

    def remove(self, value):
        """
        从链表中删除节点
        """
        # 链表为空,无法删除节点
        if not self.head:
            return

        # 要删除的是链表头节点
        if self.head.value == value:
            self.head = self.head.next
            return

        # 链表非空,找到要删除节点的前一个节点并将其指向要删除节点的下一个节点
        current = self.head
        while current.next and current.next.value != value:
            current = current.next
        if current.next:
            current.next = current.next.next

示例1:向链表中添加节点

linked_list = LinkedList()
linked_list.add(1)
linked_list.add(2)
linked_list.add(3)
linked_list.add(4)
print(linked_list)

输出:

1->2->3->4

示例2:从链表中删除节点

linked_list = LinkedList()
linked_list.add(1)
linked_list.add(2)
linked_list.add(3)
linked_list.add(4)
linked_list.remove(3)
print(linked_list)

输出:

1->2->4

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

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

相关文章

  • AngularJS基于ui-route实现深层路由的方法【路由嵌套】

    AngularJS基于ui-route实现深层路由的方法【路由嵌套】攻略 在AngularJS中,使用ui-route可以实现深层路由的方法,也就是路由嵌套。这种方式可以让我们在应用中创建复杂的页面结构,同时保持良好的代码组织和可维护性。下面是实现深层路由的步骤: 步骤一:安装和配置ui-route 首先,确保已经安装了AngularJS和ui-route。…

    other 2023年7月28日
    00
  • Java中static修饰的静态变量、方法及代码块的特性与使用

    Java中static修饰的静态变量、方法及代码块的特性与使用 1. 静态变量 静态变量是属于类的变量,可以通过类名或者对象名来访问。静态变量的特点是在内存中只有一个副本,被类所有的实例共享。定义静态变量的格式为:static dataType variableName。 静态变量的使用示例: public class Dog { private Strin…

    other 2023年6月27日
    00
  • java编程abstract类和方法详解

    第一步,我们需要明确什么是Java中的抽象类和抽象方法。 什么是抽象类? Java中的抽象类是一种不能被实例化的类,它被用来在类层次结构中表示一个通用的概念或者抽象的基类。 抽象类中可以定义成员变量,构造方法,普通方法,也可以包含抽象方法。抽象类不能被实例化,只有子类可以继承抽象类并实现其中的抽象方法。 什么是抽象方法? 抽象方法是一种没有实现的方法,它只有…

    other 2023年6月26日
    00
  • Android应用中使用Fragment组件的一些问题及解决方案总结

    Android应用中使用Fragment组件的一些问题及解决方案总结 Background Fragment是Android中的一个组件,与Activity类似,可以用于UI交互和视图管理。常见的使用场景是在大屏幕设备上,如平板电脑,可以将不同的功能区域以Fragment的形式分离开来,每个Fragment可以独立管理自己的生命周期和UI控件。 在实际的开发…

    other 2023年6月27日
    00
  • react源码中的生命周期和事件系统实例解析

    React源码中的生命周期和事件系统实例解析 React.js是一个广泛使用的JavaScript库,它使用组件定义的方式构建用户界面,而且生命周期和事件系统是React.js的核心特性之一。本篇攻略将详细讲解React源码中生命周期和事件系统的实例解析,并包含两条示例说明。 生命周期 生命周期概览 React 组件从创建到消亡都有特定的生命周期方法,可以用…

    other 2023年6月27日
    00
  • HTML5 预加载让页面得以快速呈现

    HTML5预加载是页面优化的一种手段,通过预加载页面实际需要的资源(如图片、脚本、字体等),可以让页面在用户浏览时更快地呈现出来,提高用户体验。下面是HTML5预加载的完整攻略。 1. 确定需要预加载的资源 在决定要使用HTML5预加载之前,需要确保需要预加载的资源确实会对页面加载速度造成较大的影响。通常需要预加载的资源包括: 图片:特别是较大的图片,如果页…

    other 2023年6月25日
    00
  • Shell命令批量修改图片文件名

    下面将详细讲解如何利用Shell命令批量修改图片文件名。 问题描述 有时候我们需要将一组图片文件的文件名按照规定的方式进行批量修改,例如将所有文件名中的空格替换成下划线,或者将所有文件名中的大写字母转换为小写字母。手动一个个修改显然太耗时耗力了,这时候可以利用Shell命令实现批量修改。 一、打开终端或者命令行工具 要使用Shell命令批量修改图片文件名,首…

    other 2023年6月26日
    00
  • Jquery中dialog属性小记

    Jquery中dialog属性小记 在Web开发中,弹出框是非常常见的UI组件之一。而Jquery中的dialog属性,是一个非常方便的弹出框组件。本文将详细介绍dialog的基本属性和用法。 dialog基本属性 autoOpen:bool 是否随着页面的加载自动弹出,默认为true。 modal:bool 是否是模态框,即弹出框弹出后,不允许页面的其他元…

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