实现链表结构
实现链表结构
用面向对象实现LinkedList链表
- 单向链表实现append、iternodes方法
- 双向链表实现append、pop(尾部弹出)、insert、remove(使用索引移除)、iternodes方法
- 为链表提供__getitem__、__iter__、__setitem__等方法
链表
实现LinkedList链表
链表有单向链表、双向链表
对于链表来说
- 每一个节点是一个独立的对象,节点对象有内容,还知道下一跳是什么
- 链表则是一个容器,它内部装着一个个节点对象
所以,建议设计2个类,一个是节点Node类,一个是链表LinkedList类。
如同一个箱子是容器,里面放的小球就是一个个节点。
如同一串珠子,节点对象是一个个珠子,每一颗珠子关联其前后的珠子,所有珠子形成串珠的概念,相当于容器。一串珠子可以从固定一头提起,这是单向链表;如果这串珠子可以从两头中的任意一头提起,这就是双向链表。
单向链表实现
#解决NodeList注解延后,3.10之前使用注解延后评估功能必须有下一句
from __future__ import annotations
class NodeList:
# 节点保存内容和下一跳
def __init__(self,item , next:NodeList=None): #注解延后评估
self.item = item
self.next = next
def __repr__(self):
return str(self.item)
class LinkedList:
#"容器,有头尾"
def __init__(self):
self.head = None
self.tail = None
def append(self,item):
node = NodeList(item)
#判断链表中是否有元素
if self.head == None:
self.head = node
else:
self.tail.next = node
self.tail = node
return self
def itemnodes(self):
current = self.head
while current:
yield current
current = current.next
ll = LinkedList()
ll.append("1")
ll.append(2)
for n in ll.itemnodes():
print("___",n)
双向链表
双向链表实现append、pop、insert、remove、iternodes 方法
实现单向链表没有实现的pop、remove、insert方法,补上。
双向链表的iternodes要实现两头迭代。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J.のblog!
评论