单链特点:
存储结构
代码实现
类属性
# 用来表示节点
class Node: def __init__(self, elem): self.elem = elem self.next = None
# 链表 class SingleLinkList: def __init__(self, node=None): self.__head = node # 判断是否为空, __head 为空即为空 def is_empty(self): return self.__head == None # 判断长度 def length(self): cur = self.__head # 用来遍历链表 count = 0 while cur != None: count += 1 cur = cur.next return count # 遍历链表 def travel(self): cur = self.__head # 用来遍历链表 while cur != None: print(cur.elem, end=" ") cur = cur.next print() # 链表头部添加 def add(self, item): node = Node(item) node.next = self.__head self.__head = node # 尾部插入 item 为数据, 在内部封装为节点 def append(self, item): cur = self.__head node = Node(item) if self.is_empty(): self.__head = node else: while cur.next != None: # 指向最后一个节点 cur = cur.next cur.next = node def insert(self, pos, item): # insert(2, 100) """ pos 下标,从0开始 """
# 输入的值为负数,默认头插 if pos <= 0: self.add(item) elif pos >= self.length() - 1: # 默认尾插 self.append(item) else: cur = self.__head node = Node(item) count = 0 while count < item - 1: cur = cur.next count += 1 node.next = cur.next cur.next = node # 删除找到的第一个 def remove(self, item): pre = None cur = self.__head while cur != None: if cur.elem == item: # 如果目标节点是头节点 if pre == None: self.__head = cur.next # 其他节点和尾节点 else: pre.next = cur.next return cur.elem else: pre = cur cur = cur.next def search(self, item): cur = self.__head while cur != None: if cur.elem == item: return True else: cur = cur.next return False if __name__ == "__main__": ll = SingleLinkList() print(ll.is_empty()) print(ll.length()) ll.append(1) ll.append(2) ll.append(3) ll.add(100) ll.append(4) ll.append(5) ll.append(6) ll.insert(100, 111) ll.insert(-100, 112) print(ll.length()) ll.travel() ll.remove(6) ll.travel() ll.remove(112) ll.travel() ll.remove(111) ll.travel()
结果
True
0
9
112 100 1 2 3 4 5 6 111
112 100 1 2 3 4 5 111
100 1 2 3 4 5 111
100 1 2 3 4 5
在python 中链表结构实际上很好理解, 将 后一个节点赋值给前一个节点的next值即可。
因为python 中的赋值概念是让变量指向值的地址,这与我们next概念相符。
例如:
a = 10
会先在内存中开辟一块空间存储10,让 a 指向 这块地址。
原文:https://www.cnblogs.com/ShanCe/p/14237430.html