Python 中链表的个人理解

链表组成

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
推荐阅读
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息