python 单链表查找元素_Python单链表原理与实现方法详解

本文实例讲述了Python单链表原理与实现方法。分享给大家供大家参考,具体如下:

Python实现单链表

关于链表 链表(Linked List)是由许多相同数据类型的数据项按照特定顺序排列而成的线性表。 链表中个数据项在计算机内存中的位置是不连续且随机的,数组在内存中是连续的。 链表数据的插入和删除很方便,但查找数据效率低下,不能像数组一样随机读取数据。

单链表的实现

一个单向链表的节点由数据字段和指针组成,指针指向下一个元素所在内存地址

定义一个链表节点类,self.value实例属性表示节点数据字段;self.next表示指针;初始化值为None class Node(object):

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

self.value = value

self.next = next

在单链表中第一个节点为头(head)指针节点(即头指针指向的节点为单链表第一个节点,后续简称头指针节点),从头指针节点出发可以遍历整个链表,进行元素查找,插入和删除,非常重要。一般不移动head头指针。

单链表中最后一个节点为尾节点,其指针为None,表示结束。

建立单链表我们首先需要创建头指针节点(引入头指针是为了方便操作单链表,对于头指针节点,只有指针域指向链表第一个节点,不含实际值) class linkedList(object):

def __init__(self):

self.head = Node()# 创建头指针结点

self.length = 0# 初始链表长度,头指针节点不计入长度

def __len__(self):# 重写特殊方法返回self.length

return self.length

链表初始化之后,开始定义链表方法

链表头部插入节点:

调用Node()传入待插入的值value创建待插入节点

判断当前链表是否为空链表,链表为空: 插入节点既是链表头指针指向的节点也是尾节点(指向None)

链表不为空: 待插入节点指向原头指针节点,头指针重新指向待插入节点 首先需要将原头指针结点,存放到临时变量中(防止head指针变更时,指针断裂导致数据丢失,链表中指针就是连接的纽带,其中某个纽带断裂(即指针指向其他)则后续数据都将丢失) 将头指针指向新插入节点 新插入节点指针指向原头指针节点 长度+1 def head_insert(self, value): # 链表头部插入

node = Node(value)

if self.head.next == None:

self.head.next = node

node.next = None

else:

# 插入元素指针域指向原head元素

tmp_head = self.head.next # 原头指针节点存储到tmp_head

self.head.next = node # 新head指针指向node

node.next = tmp_head # 新插入节点

你可能感兴趣的:(python,单链表查找元素)