python 单向链表的实现_Python的单向链表实现

思路

链表由节点组成,先规定节点(Node),包含data和指向下个节点的next

初始化

data当然就是传入的data了,next指向None

添加

分两种情况:

链表为空,那么头节点和尾节点都指向新插入的节点

链表不为空,那么直接在尾部添加即可

遍历

因为只有链表的尾节点的next是指向None的,所以可以根据这点来从头遍历

删除某个节点

删除的时候分3种情况:

头节点,此时更改head指向的节点就好了

尾节点,此时只需将尾节点的前一个节点(prev)的next指向None即可

中间的节点,此时要将此节点的前一个节点的(prev)的next指向后续节点的(Current.next)

搜寻

遍历查找即可

清空链表

将头节点和尾节点都置为None即可

class Node:

def __init__(self,data):

self.next = None

self.data = data

class SinglyLinkedList:

def __init__(self):

self.head = None#头节点

self.tail = None#尾节点

self.size = 0#链表长度

def append(self,data):

node = Node(data)

if self.tail:#如果链表不为空

self.tail.next = node

self.tail = node

else:

self.head = node

self.tail = node #如果这是第一个插入的节点那么头和尾都指向此节点

self.size += 1

def iter(self):

'''遍历链表'''

current = self.head

while current:

value = current.data

current = current.next

yield value

def delete(self,data):

'''根据数据删除节点'''

current = self.head

prev = self.head

while current:

if current.data == data:

if current == self.head:

self.head = current.next

elif current == self.tail:

prev.next = None

self.tail = prev

else:

prev.next = current.next

self.size -= 1

return

prev = current

current = current.next

def search(self,data):

'''搜寻某个节点'''

for node in self.iter():

if data == node:

return True

return False

def clear(self):

'''清空链表'''

self.tail = None

self.head = None

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值