前面文章中,介绍了链表结构的函数方法实现,但函数实现方法在使用上不是很方便,本文介绍一种更完善的面向对象的封装方式,可以通过传参的方式创建链表。

代码示例

1、通过列表传参创建

class LinkList():
    class Node():
        def __init__(self, item=None):
            self.item = item
            self.next = None

    def __init__(self, iterable):
        self.head = None
        self.tail = None
        self.cur_node = None
        if iterable:
            self.extend(iterable)

    def extend(self, iterable):
        for obj in iterable:
            self.append(obj)

    def append(self, obj):
        s = self.Node(obj)
        if not self.head:
            self.head = s
            self.tail = s
        else:
            self.tail.next = s
            self.tail = s

    def find(self, obj):
        for n in self:
            if n == obj:
                return True
        else:
            return False

lk = LinkList([1,2,3,4,5])
lk.append(6)

2、迭代输出

class LinkList():
    ......
    def __iter__(self):
        return self

    def __next__(self):
        if not self.cur_node:
            self.cur_node = self.head
        else:
            self.cur_node = self.cur_node.next
        # 判断是否到最后一个节点
        if self.cur_node:
            return self.cur_node.item
        else:
            raise StopIteration

    def __repr__(self):
        return str(list(map(str, self)))

print(lk)

本文为 陈华 原创,欢迎转载,但请注明出处:http://www.ichenhua.cn/read/326