数据结构--创建链表--Python

源码

python 复制代码
#封装普通节点的类
class Node:
    #构造函数,定义结点的属性
    def __init__(self, data):
        self.data = data  #普通结点的数据域
        self.next = None  #普通结点的连接域,刚构造的结点该位置域为空


#封装链表的类(封装头节点)
class Linklist:
    def __init__(self, node=None):
        self.size = 0  #头结点的数据域为0 链表的长度为0
        self.head = node  #头结点的连接域指向None

    #判空
    def is_empty(self):
        return not self.head

    #   return self.size==0  或者判断长度是否为零
    #头插
    def add_head(self, value):
        #创建一个新的结点
        node = Node(value)
        node.next = self.head
        self.head = node
        self.size += 1

    #尾插
    def add_tail(self, value):
        #创建一个结点node
        node = Node(value)
        #找最后一个结点
        # q = self.head
        # i=1
        # while i<self.size:
        #     q=q.next
        #     i+=1
        # q.next=node
        # self.size+=1
        #第二种方法
        q = self.head
        while q.next:
            q = q.next
        q.next = node
        self.size += 1
        #第三种
        # while True:
        #     q=q.next
        #     if not q.next:
        #         q.next = node
        #         self.size+=1
        #         break

    #任意位置插
    def add_any(self, id, value):
        node = Node(value)
        if id == 1:
            self.add_head(value)
        elif id == self.size+1:
            self.add_tail(value)
        elif id>self.size+1:
            print('插入失败')
            return
        else:
            q = self.head
            i = 1
            while i < id - 1:
                q = q.next
                i += 1
            node.next = q.next
            q.next = node
            self.size += 1

    #头删
    def del_head(self):
        self.head = self.head.next
        self.size -= 1

    #尾删
    def del_tail(self):
        if self.size==1:
            self.head=None
        else:
            q = self.head
            for i in range(self.size - 2):
                q = q.next
            q.next = None
            self.size -= 1
    #任意位置删
    def del_any(self,id):
        if id==1:
            self.del_head()
        else:
            q = self.head
            for i in range(id - 2):
                q = q.next
            q.next = q.next.next
            self.size -= 1
    #遍历
    def show(self):
        #判空
        if self.is_empty():
            print('遍历失败')
            return
        else:
            q = self.head
            while q:
                print(q.data, end=' ')
                q = q.next
            print()
    #任意位置修改
    def change_id(self,id,value):
        if id==1:
            self.head.data=value
        else:
            q=self.head
            for i in range(id-1):
                q=q.next
            q.data=value
    #按值修改
    def change_value(self,value,new_value):
        q=self.head
        while q:
            if q.data==value:
                q.data=new_value
                break
            q=q.next
    #按值查找返回位置
    def return_id(self,value):
        q=self.head
        i=1
        while q:
            if q.data==value:
                print(i)
                return
            q=q.next
            i+=1
        else:
            print('没有该值')
    #链表的翻转
    def reverse(self):
        prev = None
        current = self.head
        while current:
            next_node = current.next
            current.next = prev
            prev = current
            current = next_node
        self.head = prev




#测试
if __name__ == '__main__':
    #创建链表
    linklist = Linklist()
    linklist.add_head(10)
    linklist.add_head(20)
    linklist.add_head(30)
    linklist.add_head(40)
    linklist.add_head(50)
    linklist.add_tail(50)
    # linklist.add_any(8, 100)
    # linklist.del_head()
    linklist.del_tail()
    linklist.del_any(2)
    linklist.change_id(2,80)
    linklist.change_value(80,40)
    linklist.return_id(40)
    linklist.reverse()
    #遍历
    linklist.show()
相关推荐
ℳ₯㎕ddzོꦿ࿐2 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask
CodeClimb2 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
一水鉴天2 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
Channing Lewis2 小时前
什么是 Flask 的蓝图(Blueprint)
后端·python·flask
B站计算机毕业设计超人2 小时前
计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫
大数据·hadoop·python·spark·课程设计·数据可视化·推荐算法
觅远2 小时前
python+playwright自动化测试(四):元素操作(键盘鼠标事件)、文件上传
python·自动化
ghostwritten3 小时前
Python FastAPI 实战应用指南
开发语言·python·fastapi
苦 涩3 小时前
考研408笔记之数据结构(七)——排序
数据结构
CM莫问4 小时前
python实战(十五)——中文手写体数字图像CNN分类
人工智能·python·深度学习·算法·cnn·图像分类·手写体识别
Victoria.a5 小时前
顺序表和链表(详解)
数据结构·链表