ITPub博客

首页 > 应用开发 > Python > Python 中链表的个人理解

Python 中链表的个人理解

原创 Python 作者:松前卡气 时间:2025-04-16 09:16:10 0 删除 编辑

链表组成


Python 中链表由 head、 节点、tail、 三部分组成。


  1. 节点为Python 链表中最重要的部分,通过构建class Node()类,节点引入并存储value和next变量,其中value为Node中存储的链表内容,next为Node中存储的指针,指向下一个Node。即Node由指针域next和结构域value构成。

  2. 链表由上述Node连结而成,其中head指向链表的第一个节点,tail指向链表最后一个节点。

  3. tail指向的尾端Node的next指向(存储)None,即该Node的指针域存储 None的内存地址。


示例代码:


    class Node():

    def __init__(self, context=None, next=None):

        self._context = context  # 提高代码的健壮性  类似Java 的处理 需要定义函数获取参数数据

        self._next = next


    def getContext(self):

        return self._context


    def getNext(self):

        return self._next


    def setContext(self, newContext):

        self._context = newContext


    def setNext(self, newNext):

        self._next = newNext



    class LinkedList():

    def __init__(self):

        self._head = None

        self._tail = None

        self._length = 0


    def isempty(self):

        return self._head is None


    def add(self, newadding):

        newNode = Node()

        newNode.setContext(newadding)

        newNode.setNext(self._head)

        self._head = newNode

        if self._tail is None:

            self._tail = newNode

        self._length += 1


    def append(self, newAppending):

        newANode = Node()

        newANode.setContext(newAppending)

        if self._head is None:

            self._tail = newANode

            self._head = newANode

        else:

            self._tail.setNext(newANode)

            self._tail = newANode

        self._length += 1


    def remove(self, context):

        previous = None

        current = self._head

        while current is not None:

            if current.getContext() == context:

                if not previous:

                    self._head = current.getNext()

                else:

                    previous.setNext(current.getNext())

                break

            else:

                previous = current

                current = current.getNext()


    def search(self, context):

        current = self._head

        result = False

        while current is not None and not result:

            if current.getContext() == context:

                result = True

            else:

                current = current.getNext()

        return result


    def items(self):

        cur = self._head

        while cur is not None:

            yield cur.getContext()

            cur = cur.getNext()


    @property

    def tail(self):

        return self._tail



    if __name__ == '__main__':

    LL = LinkedList()

    print(LL.isempty())

    LL.add(1)

    LL.add(2)

    print(LL._tail.getContext())

    print(LL)

    for i in LL.items():

        print(i)

    print(LL.search(2))

    LL.append(3)

    for i in LL.items():

        print(i)

    LL.remove(1)

    for i in LL.items():

        print(i)

    print(LL.search(1))

    print(LL._tail.getContext())



上述示例运行结果如下:


    True

    1

    <__main__.LinkedList object at 0x000002157A80BFD0>

    2

    1

    True

    2

    1

    3

    2

    3

    False

    3


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70044235/viewspace-3081408/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-03-11

  • 博文量
    36
  • 访问量
    41915