链表组成

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

  • 节点为Python 链表中最重要的部分,通过构建class Node()类,节点引入并存储value和next变量,其中value为Node中存储的链表内容,next为Node中存储的指针,指向下一个Node。即Node由指针域next和结构域value构成。
  • 链表由上述Node连结而成,其中head指向链表的第一个节点,tail指向链表最后一个节点。
  • 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

愚刃
1 声望0 粉丝