Python编写单链表

1. 运行示例:

在这里插入图片描述

2. 代码

文件:list.py

实现方法有限,可根据需要再次加工。

"""
"""
单链表
实现:
1.链表的创建
2.节点的添加
3.节点删除
4.打印节点
"""

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

class Link(object):
    """单链表"""
    def __init__(self, data=None):
        self.head = None
        if data != None:
            self.initialization(data)

    def initialization(self, data=None):
        """初始化"""
        if self.head != None:
            print("Error: Link had been initialization!")
        elif data == None:
            print("Error: Parameter data cannot be empty!")
        else:
            self._add_to_tail(data)

    def _add_to_tail(self, data):
        """增加节点"""
        if type(data) == int:
            data = [data]
        for da in data:
            node = Node(da)
            if self.head == None:
                self.head = node
            else:
                probe = self.head
                while probe.next != None:
                    probe = probe.next
                node.next = probe.next
                probe.next = node

    def append(self, data=None):
        """向链表末尾添加节点"""
        self._add_to_tail(data)

    def travering(self):
        """打印所有节点"""
        if self.head == None:
            pass
        else:
            probe = self.head
            while probe != None:
                print(probe.data)
                probe = probe.next

    def length(self):
        """长度"""
        length = 0
        probe = self.head
        while probe != None:
            length += 1
            probe = probe.next
        return length

    def pop(self, index=None):
        """删除节点, 默认删除最后一个"""
        data = None
        if self.head == None:
            return data
        elif index != None and index <= 0:
            return "Error: Parameter must be > 0!"
        elif index != None and index > self.length():
            return "Error: Parameter must be " + \
                    "<= {}!".format(self.length())
        else:
            # 只有1个节点
            if self.head.next == None:
                data = self.head.data
                self.head = None
            else:
                if index == 1:    # 删除第一个节点
                    data = self.head.data
                    self.head = self.head.next
                    return data
                elif index == None:
                    index = self.length()
                probe = self.head
                i = 2   # 第一个节点之后
                while probe.next.next != None and i < index:
                    probe = probe.next
                    i += 1
                data = probe.next.data
                if index == self.length():    # 删除在尾部
                    probe.next = None
                else:   # 删除在中间
                    probe.next = probe.next.next
        return data
双向链表

https://blog.csdn.net/qq_38038143/article/details/89315295

完!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值