Python 中链表的个人理解

简介: 简介:本文介绍了Python中链表的基本组成及其操作实现。链表由`head`(头节点)、中间节点和`tail`(尾节点)三部分构成,每个节点通过`Node`类定义,包含`value`(值域)和`next`(指针域)。示例代码展示了链表的增删查功能,包括`add`(头部插入)、`append`(尾部插入)、`remove`(删除节点)、`search`(查找节点)及遍历方法。运行结果验证了链表操作的正确性。

链表组成

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
相关文章
|
8月前
|
存储 Python
Python 实现单向链表,和单向链表的反转
链表是一种数据结构,每个节点存储相邻节点的位置信息。单链表中的节点仅存储下一节点的位置。通过Python实现单链表,定义`ListNode`类并关联节点可创建链表。例如,创建A-&gt;B-&gt;C的链表后,可通过反转函数`reverse`将链表反转为CBA。代码展示了如何实现和操作单链表。
151 6
Python 实现单向链表,和单向链表的反转
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
151 2
|
索引 Python
【Leetcode刷题Python】328. 奇偶链表
在不使用额外空间的情况下,将链表中的奇数和偶数索引节点重新排序的方法,并提供了相应的Python实现代码。
116 0
|
Python
【Leetcode刷题Python】25.K 个一组翻转链表
解决LeetCode "K 个一组翻转链表" 问题的三种方法:使用栈、尾插法和虚拟节点顺序法,并提供了每种方法的Python实现代码。
166 0
|
8月前
|
存储 算法 搜索推荐
Python 实现反转、合并链表有啥用?
大家好,我是V哥。本文介绍Python实现反转链表和合并链表的应用场景及代码实现。反转链表适用于时间序列数据展示、回文链表判断等;合并链表则用于大规模数据排序、数据库查询结果集合并等。通过迭代和递归方法实现反转链表,以及合并两个或多个有序链表的算法,帮助开发者解决实际问题。关注V哥,了解更多实用编程技巧。 先赞再看后评论,腰缠万贯财进门。
127 0
|
9月前
|
Python
探索 Python 中链表的实现:从基础到高级
链表是一种由节点组成的基础数据结构,每个节点包含数据和指向下一个节点的引用。本文通过Python类实现单向链表,详细介绍了创建、插入、删除节点等操作,并提供示例代码帮助理解。链表在处理动态数据时具有高效性,适用于大量数据变动的场景。文章为初学者提供了全面的入门指南,助你掌握链表的核心概念与应用。
406 0
|
Python
【Leetcode刷题Python】114. 二叉树展开为链表
LeetCode上114号问题"二叉树展开为链表"的Python实现,通过先序遍历二叉树并调整节点的左右指针,将二叉树转换为先序遍历顺序的单链表。
102 3
【Leetcode刷题Python】114. 二叉树展开为链表
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
148 5
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
133 4
|
存储 Python
【Leetcode刷题Python】23. 合并K个升序链表
合并K个升序链表的方法:使用数组排序的暴力求解法、使用小顶堆的高效方法,以及分而治之的策略,并提供了相应的Python实现代码。
137 1

推荐镜像

更多