Ctrl+f搜关键词,搜不到找其他博客,下面肯定没有
链表
单向链表
- is_empty() 链表是否为空
- length()
- nodes_list() 返回链表中的所有结点的值组成的列表
- add(data) 链表头部添加节点,值为data
- append(data) 链表尾部添加节点,值为data
- insert(pos,data)
- remove(data) 删除第一个值为data的节点
- modify(pos,data) 修改指定位置的元素的值
- search(data) 查找结点是否存在
pycharm实现
单向链表
class Node:
# 节点类
def __init__(self, data, _next=None):
self.data = data # 数据域
self.next = _next # 指针域
class SingleLinkList:
def __init__(self):
self.head = None # 链表的头结点
self._length = 0 # 链表的长度,链表的元素个数
def is_empty(self):
# 判断链表是否为空
return self._length == 0
def length(self):
# 返回链表的长度
return self._length
def nodes_list(self):
# 返回链表中的所有节点的值组成的列表
res = []
cur = self.head
while cur:
res.append(cur.data)
cur = cur.next
return res
def add(self, data):
# 往链表的头部添加一个节点,值为data
# 新建一个节点node
node = Node(data)
# 先让node指向当前链表中的头结点
node.next = self.head
# 再让链表的head指向当前node节点
self.head = node
# 添加节点之后,链表的长度加1
self._length += 1
def append(self, data):
# 往链表的尾部添加一个节点,值为data
# 新建一个节点node,值为data
node = Node(data)
# 找到链表的尾节点
# 从头结点开始,遍历链表中的所有节点
# 每次判断当前节点的next是否为空
# 为空说明当前节点就是尾节点
# 不为空 通过当前节点的next去访问下一个节点,
if self.head:
cur = self.head
while cur.next:
cur = cur.next
# 让当前的尾节点的指针域指向node
cur.next = node
else:
self.head = node
# 链表的长度+1
self._length += 1
def insert(self, pos, data):
# 往链表的指定位置插入一个节点,值为data
if pos <= 0:
self.add(data)
elif pos > self._length:
self.append(data)
else:
# 正常的输入
# 第一步 新建一个节点 node
node = Node(data)
# 第二步
cur = self.head
while pos - 1:
cur = cur.next
pos -= 1
# 到这里之后,cur指向的是索引为pos-1的节点
# 让node的next指向索引为pos的节点
node.next = cur.next
# 让索引为pos-1的节点的next指向cur
cur.next = node
self._length += 1
def remove(self, data):
# 删除链表中第一个值为data的结点
cur = self.head
prev = None # 要删除的节点的前驱结点
while cur:
if cur.data == data:
# 如果前驱结点为空,说明我们要删除的节点是第一个节点
if not prev:
self.head = cur.next
else:
prev.next = cur.next
self._length -= 1
return 0
prev