python实现链表

用python实现了简单的链表数据结构,并进行插入删除等操作


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Node(object):     # node 类
    def __init__(self, val, p=None):
        self.data = val
        self.next = p
    def __repr__(self):     # 打印 data
        return str(self.data)

class Linklist(object):     # 链表类
    def __init__(self):
        self.head = None
        self.length = 0

    def isEmpty(self):      # 判断链表是否为空
        return (self.length == 0)

    def insert(self, index, dataOrNode):        # 插入
        if index < 0 or index > self.length:
            print('error: out of index')
            return

        item = None
        if isinstance(dataOrNode, Node):    # 判断数据类型
            item = dataOrNode
        else:
            item = Node(dataOrNode)

        if index == 0:      # 头部插入
            item.next = self.head
            self.head = item
            self.length += 1
            return
        j = 0               # 中间插入
        node = self.head
        pre = self.head
        while node.next and j < index:
            pre = node
            node = node.next
            j += 1
        if j == index:
            item.next = node
            pre.next = item
            self.length += 1

    def delete(self, index):        # 删除
        if self.isEmpty():
            print('this linklist is empty')
            return
        if index < 0 or index > self.length:
            print('error: out of index')
            return
        if index == 0:      # 头部删除
            self.head = self.head.next
            self.length -= 1
            return
        j = 0               # 中部删除
        node = self.head
        pre = self.head
        while node and j < index:
            pre = node
            node = node.next
            j += 1
        if j == index:
            pre.next = node.next
            self.length -= 1

    def __repr__(self):     # 打印链表
        if self.isEmpty():
            return 'the linklist is empty'
        node = self.head
        nlist = ''
        while node:
            nlist += str(node.data) + ' '
            node = node.next
        return nlist

if __name__ == '__main__':
    linklist_1 = Linklist()

    for i in range(10):
        linklist_1.insert(0, i)
    print(linklist_1)

    linklist_1.delete(5)
    print(linklist_1)

参考:

https://www.cnblogs.com/king-ding/p/pythonchaintable.html

https://blog.csdn.net/tales_/article/details/48145749

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值