栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python实现单链表

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python实现单链表

首先是Python中结点的表示方法 类似于C语言,C语言中用结构体来表示,而Python中用类来表示 1. 用class来表示结点
class ListNode(object):
    def __init__(self,val,next = None):
        self.val = val                        #数据域
        self.next = next                      #指针域

在这个类中包含了数据域和指针域,数据域val是当前结点的值,指针域next是指向下一个结点的指针。

2.使用尾插法来创建一个结点
    def Creat(self,n):                        #创建链表
        head = []                             #用列表来存储结点
        for i in range(n):
            head.append(ListNode(i))          #尾插建立链表
        for i in range(n-1):
            head[i].next = head[i+1]          #连接链表
        return head                           #返回头结点

head是一个列表,用来存储结点,n为传入的结点个数。第一个for循环中调用ListNode类来创建结点,并用append方法来将新建立的结点储存在列表尾。第二个for循环让前一个结点的指针域指向下一个结点,两个for循环实现链表的创建。

3.打印链表
    def Printf(self,head):                    #打印链表
        while head is not None:
            print(head.val)                   #输出结点的数据域
            head = head.next

只要下一个结点不为空,就不断打印每个结点的数据域。

4.在指定位置插入元素
       def Insert(self,value,n,node):            #在指定位置插入元素
        if n < len(node):                     #判断插入的指定的位置是否合法
            node.insert(n, ListNode(value))
            for i in range(len(node) - 1):
                node[i].next = node[i + 1]    # 插入后重新连接结点
            return node
        else:
            print("插入的位置不合法")

传入的参数分别是value是值,n是指定的位置,node是储存结点的列表。首先需要判断插入的位置是否合法,如果n>链表的长度则不合法,输出提示。如果插入位置合法,调用ListNode类创建结点并用insert方法插入到指定位置。注意,以上操作并没有把新建立的结点连接到原链表,需要一个for循环来重新连接链表。

5.在指定位置插入元素
    def Deleta(self, n, node):                #删除指定位置元素
        if n < len(node):                     #判断插入的位置是否合法
            node.pop(n)
            for i in range(len(node) - 1):
                node[i].next = node[i + 1]    #删除后重新连接结点
            return node
        else:
            print('删除的位置不合法')

传入的参数,n是指定的位置,node是存储结点的列表。首先判断删除的指定位置是否合法,即判断位置索引和链表长度的关系。如果不合法输出提示,如果合法,调用pop方法来删除指定位置的结点。注意,删除结点后原链表就从此位置断开了,需要一个ffor循环重新连接链表。

6.输出链表结点个数
    def CoundNodes(self,head):                #输出链表节点数
        cnt = 0                               #结点数初始化为0
        while head is not None:               #只要下一个结点不为空
            cnt += 1
            head = head.next                  #结点后移
        return cnt                            #返回结点个数

传入的参数head是存储链表结点的列表。cnt初始化为0,用来记录结点的个数。在while循环中,只要链表的后继结点不为空,结点数就加1,最后返回结点个数。

完整代码
class ListNode(object):
    def __init__(self,val,next = None):
        self.val = val                        #数据域
        self.next = next                      #指针域
#链表节点个数
class Solution():
    def Creat(self,n):                        #创建链表
        head = []                             #用列表来存储结点
        for i in range(n):
            head.append(ListNode(i))          #尾插建立链表
        for i in range(n-1):
            head[i].next = head[i+1]          #连接链表
        return head                           #返回头结点

    def CoundNodes(self,head):                #输出链表节点数
        cnt = 0                               #结点数初始化为0
        while head is not None:               #只要下一个结点不为空
            cnt += 1
            head = head.next                  #结点后移
        return cnt                            #返回结点个数

    def Printf(self,head):                    #打印链表
        while head is not None:
            print(head.val)                   #输出结点的数据域
            head = head.next

    def Insert(self,value,n,node):            #在指定位置插入元素
        if n < len(node):                     #判断插入的指定的位置是否合法
            node.insert(n, ListNode(value))
            for i in range(len(node) - 1):
                node[i].next = node[i + 1]    # 插入后重新连接结点
            return node
        else:
            print("插入的位置不合法")

    def Deleta(self, n, node):                #删除指定位置元素
        if n < len(node):                     #判断插入的位置是否合法
            node.pop(n)
            for i in range(len(node) - 1):
                node[i].next = node[i + 1]    #删除后重新连接结点
            return node
        else:
            print('删除的位置不合法')

if __name__ == '__main__':
    node = Solution().Creat(7)                #创建一个7个结点的链表
    Solution().Printf(node[0])                #打印链表
    print('--------')
    node = Solution().Insert(520,3,node)      #在4位置插入520
    Solution().Printf(node[0])
    print('--------')
    node = Solution().Deleta(5,node)          #删除6位置的结点
    Solution().Printf(node[0])
    print(f'节点个数为:{Solution().CoundNodes(node[0])}')

2021.10.03.LN

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286321.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号