思路
链表由节点组成,先规定节点(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
来源:https://www.cnblogs.com/MartinLwx/p/9606939.html