python链表(代码)

简易链表

导入模块

import datetime
import uuid

初始化链表单个节点中包含的元素

def block(args):
    node = {
        'content': {
            'username': args[0],
            'c_time': args[1],
            'hash_id': uuid.uuid4().hex
        },
        'prev': None,  # 指向上一个节点的hash_id
        'next': None   # 指向下一个节点的hash_id
    }
    return node
  1. 单链表
    最后一个节点的next为None
class LinkList:
    """链表"""

    def __init__(self):
        self.link_list = []

    def add_single(self, args):
        """单链表添加"""
        node = block(args)
        if self.link_list:
            self.link_list[-1]['next'] = node['content']['hash_id']
        self.link_list.append(node)

if __name__ == '__main__':
    c_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    params = ('小红', c_time)
    obj = LinkList()
    obj.add_single(params)
    params = ('小红', c_time)
    obj.add_single(params)
    params = ('小红', c_time)
    obj.add_single(params)
    print(obj.link_list)

输出

[
{'content': {'username': '小红', 'c_time': '2022-06-13 17:09:19', 'hash_id': 'b6b69684cbc64ac3a25bf182010af2f2'}, 'prev': None, 'next': '1da4075ca4474862ae80d32defe771c6'}
{'content': {'username': '小红', 'c_time': '2022-06-13 17:09:19', 'hash_id': '1da4075ca4474862ae80d32defe771c6'}, 'prev': None, 'next': '62a813d2b0144e5c91242c9838c6f6f5'}
{'content': {'username': '小红', 'c_time': '2022-06-13 17:09:19', 'hash_id': '62a813d2b0144e5c91242c9838c6f6f5'}, 'prev': None, 'next': None}
]
  1. 单向循环链表
    最后一个节点的next指定第一个节点的hash_id
class LinkList:
    """链表"""

    def __init__(self):
        self.link_list = []

    def add_single_range(self, args):
        """单向循环列表添加"""
        node = block(args)
        if self.link_list:
            self.link_list[-1]['next'] = node['content']['hash_id']
            node['next'] = self.link_list[0]['content']['hash_id']
        self.link_list.append(node)

if __name__ == '__main__':
    c_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    params = ('小红', c_time)
    obj = LinkList()
    obj.add_single_range(params)
    params = ('小红', c_time)
    obj.add_single_range(params)
    params = ('小红', c_time)
    obj.add_single_range(params)
    print(obj.link_list)

输出

[
{'content': {'username': '小红', 'c_time': '2022-06-13 17:12:10', 'hash_id': '9f22a41d5c8d4815b771d05e2f9afd5e'}, 'prev': None, 'next': '28e33c106f444798b4905c35a64bd4fa'}
{'content': {'username': '小红', 'c_time': '2022-06-13 17:12:10', 'hash_id': '28e33c106f444798b4905c35a64bd4fa'}, 'prev': None, 'next': '7695ee7b9c064aec924b9984f481d31b'}
{'content': {'username': '小红', 'c_time': '2022-06-13 17:12:10', 'hash_id': '7695ee7b9c064aec924b9984f481d31b'}, 'prev': None, 'next': '9f22a41d5c8d4815b771d05e2f9afd5e'}
]
  1. 双向循环链表
    最后一个节点的next指向第一个节点的hash_id,第一个节点的prev指向最后一个节点的hash_id
class LinkList:
    """链表"""

    def __init__(self):
        self.link_list = []

    def add_range(self, args):
        """双向循环列表"""
        node = block(args)
        if self.link_list:
            self.link_list[-1]['next'] = node['content']['hash_id']
            node['next'] = self.link_list[0]['content']['hash_id']

            self.link_list[0]['prev'] = node['content']['hash_id']
            node['prev'] = self.link_list[-1]['content']['hash_id']
        self.link_list.append(node)

if __name__ == '__main__':
    c_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    params = ('小红', c_time)
    obj = LinkList()
    obj.add_range(params)
    params = ('小红', c_time)
    obj.add_range(params)
    params = ('小红', c_time)
    obj.add_range(params)
    print(obj.link_list)

输出

{'content': {'username': '小红', 'c_time': '2022-06-13 17:15:22', 'hash_id': '9c8551109e15420ca6c1de771214087a'}, 'prev': 'fefb95f2b5e14bd5a386365cd681be2a', 'next': '4940219b2f40444e9b57613ecd01ad7c'}
{'content': {'username': '小红', 'c_time': '2022-06-13 17:15:22', 'hash_id': '4940219b2f40444e9b57613ecd01ad7c'}, 'prev': '9c8551109e15420ca6c1de771214087a', 'next': 'fefb95f2b5e14bd5a386365cd681be2a'}
{'content': {'username': '小红', 'c_time': '2022-06-13 17:15:22', 'hash_id': 'fefb95f2b5e14bd5a386365cd681be2a'}, 'prev': '4940219b2f40444e9b57613ecd01ad7c', 'next': '9c8551109e15420ca6c1de771214087a'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值