Python单向链表数据结构详解与完整实现
本文深入解析Python中单向链表的数据结构原理及完整代码实现。详细讲解节点(Node)的构成,包括数据域与链接域,并逐一演示判断空链表、获取长度、遍历、头部/尾部/指定位置添加元素、删除节点及查找节点等核心操作的具体逻辑与Python代码实现,帮助开发者掌握链表基础应用。
单向链表
单向链表,亦称单链表,是链表结构中最基础的一种形式。其核心特征在于每个节点由两个部分组成:一个是用于存储具体数据的“信息域”(或称元素域),另一个是指向链表中下一个节点位置的“链接域”。在链表的末端,最后一个节点的链接域通常指向空值(None),以此标识链表的结束。

在节点结构中,元素域(通常命名为elem)负责存放该节点所承载的具体数据内容。
链接域(通常命名为next)用于存储指向下一个节点内存地址的标识,在Python中表现为对下一个节点对象的引用。
变量p通常被定义为指向链表的头节点(即首节点)的位置。通过持有头节点的引用,程序可以从p出发,沿着链接域依次访问到链表中的任意节点。
节点实现
class Node(object): """单链表的结点""" def __init__(self,item): # item存放数据元素 self.item = item # next是下一个节点的标识 self.next = None
单链表的操作
is_empty():用于判断当前链表是否为空。
length():用于计算并返回链表中节点的数量,即链表长度。
travel():用于按顺序遍历整个链表,通常配合打印操作展示所有节点数据。
add(item):用于在链表的头部(首节点之前)添加一个新元素。
append(item):用于在链表的尾部(最后一个节点之后)添加一个新元素。
insert(pos, item):用于在链表指定的索引位置pos处插入一个新元素item。
remove(item):用于从链表中删除第一个匹配指定值item的节点。
search(item):用于检查链表中是否存在值为item的节点,若存在则返回True,否则返回False。
单链表的实现
class Singlepnkpst(object):
"""单链表"""
def __init__(self):
self.__head = None
def is_empty(self):
"""判断链表是否为空"""
return self.__head == None
def length(self):
"""链表长度"""
# cur初始时指向头节点
cur = self.__head
count = 0
# 尾节点指向None,当未到达尾部时
while cur != None:
count += 1
# 将cur后移一个节点
cur = cur.next
return count
def travel(self):
"""遍历链表"""
cur = self.__head
while cur != None:
print(cur.item,end = ' ')
cur = cur.next
print("")
头部添加元素

def add(self, item): """头部添加元素""" # 先创建一个保存item值的节点 node = Node(item) # 将新节点的链接域next指向头节点,即_head指向的位置 node.next = self.__head # 将链表的头_head指向新节点 self.__head = nod
尾部添加元素
def append(self, item): """尾部添加元素""" node = Node(item) # 先判断链表是否为空,若是空链表,则将_head指向新节点 if self.is_empty(): self.__head = node # 若不为空,则找到尾部,将尾节点的next指向新节点 else: cur = self.__head while cur.next != None: cur = cur.next cur.next = node
指定位置添加元素

def insert(self, pos, item): """指定位置添加元素""" # 若指定位置pos为第一个元素之前,则执行头部插入 if pos <= 0: self.add(item) # 若指定位置超过链表尾部,则执行尾部插入 epf pos > (self.length()-1): self.append(item) # 找到指定位置 else: node = Node(item) count = 0 # pre用来指向指定位置pos的前一个位置pos-1,初始从头节点开始移动到指定位置 pre = self.__head while count < (pos-1): count += 1 pre = pre.next # 先将新节点node的next指向插入位置的节点 node.next = pre.next # 将插入位置的前一个节点的next指向新节点 pre.next = node
删除节点

def remove(self,item): """删除节点""" cur = self.__head pre = None while cur != None: # 找到了指定元素 if cur.item == item: # 如果第一个就是删除的节点 if not pre: # 将头指针指向头节点的后一个节点 self.__head = cur.next else: # 将删除位置前一个节点的next指向删除位置的后一个节点 pre.next = cur.next break else: # 继续按链表后移节点 pre = cur cur = cur.next
查找节点是否存在
def search(self,item): """链表查找节点是否存在,并返回True或者False""" cur = self.__head while cur != None: if cur.item == item: return True cur = cur.next return False
以上关于Python数据结构中单向链表的实例讲解内容至此结束,旨在为读者提供清晰的参考。如有任何疑问或建议,欢迎反馈以支持本站内容的持续优化。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













