python单链表的实现

‘‘‘
当加入第一个node节点的时候,会有几个值,(这里的self.tail.next 其实就是node.next)
head = item = tail = Node(object element1 memory)
item = head = tail = Node(object element1 memory)
next = None
tail = item = head = Node(object element1 memory)

当加入第二个元素node节点的时候,next1值会改变,tail会向后漂移,head将会保留
新加入第二个元素后第一个节点变成了
head = item1 = Node(object element1 memory)
item1= head = Node(object element1 memory)
next = Node(object element2 memory)

第二个节点为:
item = tail = Node(object element2 memory)
next = Node(object element2 memory)
tail = item = Node(object element2 memory)

当加入第三个元素的时候,tail.next继续为None item为新元素tail结束元素为新元素,
item = tail = Node(object element3 memory)
next = None
tail = item = Node(object element3 memory)
‘‘‘

class Node:
def __init__(self,item,next=None):
self.item = item #记录元素
self.next = next #记录下一跳节点

#为了输出 我们可以看到的结果:
def __repr__(self):
return ‘{} ==> {}‘.format(self.item,self.next)

class LinkedList:
def __init__(self):
self.head= None
self.tail = None

def append(self,value):
#添加链表前需要,实例化一个节点,来进行赋值
node = Node(value) #实例化节点
#添加链表,首先判断链表是否为空,
# 空列表时 head= tail = None
#添加元素后head = value = tail = Node(value) = node
if self.head == None:
self.head = node
# self.tail = node
#当链表不为空时向后添加,既是向后添加,添加后的值为
# self.tail.next = Node(last(value)).next = node
#要知道self.tail值的改变是不应为append的改变而改变了,只是再重新赋值之后才会改变的
# self.tail = node #现在的结尾部分被重新赋值
else:
self.tail.next = node #如果添加的是最后一位,next就是默认值既是None
# self.tail = node
# if和slse有公共部分self.tail = node可以直接提出来,
self.tail = node

def iternode(self):
#这里的迭代可以使用我们定义好的方法来做,因为每个node节点都有next可以调用下一个节点,因此我们可以利用这一特性来做迭代
#因为我们不知道需要迭代的个数有多少个,因此只能使用yield配合while循环来做,然后使用节点的下一个来重赋值,知道current为None,while循环结束
current = self.head
while current:
yield current
current = current.next
ll = LinkedList()
ll.append(1)
ll.append(2)
ll.append(3)
for i in ll.iternode():
print(i)

输出结果为:

1 ==> 2 ==> 3 ==> None
2 ==> 3 ==> None
3 ==> None

原文地址:https://blog.51cto.com/853056088/2402561

时间: 2024-11-01 08:44:59

python单链表的实现的相关文章

python单链表实例分享

有关python单链表的实现代码. 链表的定义:链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列.也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域:另一部分用于存储下一个数据元素地址的指针,称为指针域.链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点.链表中的最后一个结点没有后继元素,其指针域为空. p

用最简单的方式学Python单链表

Python 实现单链表 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式截然不同 什么是单链表 单链表 最简单的形式就是由多个节点的集合共同构成一个线性序列.每个节点存储一个对象的引用,这个引用指向序列中的一个元素,即存储指向列表的下一个节点. 其实,上面的术语用生活中的大白话来解释,就是我们现在有三个人--我.你.他.当我用手指指向你,你用手指指向他,这样就形成了一个

数据结构:单链表结构字符串(python版)

1 #!/urs/bin/env python 2 # -*- coding:utf-8 -*- 3 4 #异常类 5 class stringTypeError(TypeError): 6 pass 7 8 #节点类 9 class Node(object): 10 def __init__(self, elem, next_ = None): 11 self.elem = elem 12 self.next = next_ 13 #单链表类 14 class single_list(obje

单链表反转python实现

单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可. 代码: class ListNode: def __init__(self,x): self.val=x; self.next=None; def nonrecurse(head): #循环的方法反转链表 if head is None or head.next is None: return head; pre=None; c

数据结构:单链表结构字符串(python版)添加了三个新功能

1 #!/urs/bin/env python 2 # -*- coding:utf-8 -*- 3 4 #异常类 5 class stringTypeError(TypeError): 6 pass 7 8 #节点类 9 class Node(object): 10 def __init__(self, elem, next_ = None): 11 self.elem = elem 12 self.next = next_ 13 #单链表类 14 class single_list(obje

Python 实现一个全面的单链表

前言 实现清单 链表实现 总结 前言 算法和数据结构是一个亘古不变的话题,作为一个程序员,掌握常用的数据结构实现是非常非常的有必要的. 实现清单 实现链表,本质上和语言是无关的.但是灵活度却和实现它的语言密切相关.今天用Python来实现一下,包含如下操作: ['addNode(self, data)'] ['append(self, value)'] ['prepend(self, value)'] ['insert(self, index, value)'] ['delNode(self,

Python 之简易单链表

单链表的基本要素有 2 个,数据项和连接项.这两项在 Python 中可以通过对象及其属性来实现. 1 class Node: 2 def __init__ (self, data): 3 self.data = data 4 self.next = None 5 6 def add (self, data): 7 p = self 8 9 while p.next != None: 10 p = p.next 11 12 p.next = Node (data) 13 14 def subtr

Python与数据结构[0] -> 链表[0] -> 单链表与带表头单链表的 Python 实现

单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利用Python来完成单链表的实现. 1 单链表 不带表头的单链表通常形式如下, node_1 -> node_2 -> node_3 -> node_4 完整代码 1 class Node: 2 def __init__(self, val=None, nxt=None): 3 self.v

单链表的python实现

首先说下线性表,线性表是一种最基本,最简单的数据结构,通俗点讲就是一维的存储数据的结构. 线性表分为顺序表和链接表: 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存储结构或顺序映像: 链式表示指的是用一组任意的存储单元存储线性表中的数据元素,称为线性表的链式存储结构.而他既可以是连续的也可以不连续,是通过一个与后继结点的连接信息构建起来的. *顺序表(这个不是本次重点,简单介绍一下) 顺序表是用一段连续的存储单元依次存储数据元素,查找元素是很方便的,但是如果要