概述
链表是用指针连接的用于存储数据的数组,它的最大的优点是可以有效的利用零碎的内存空间,在很多语言中数组需要提前定义,而且定义后不可以进行修改,存储同一类型的数据。在Python中没有指针,需要使用模拟指针, 链表可以修改长度,并且存储不同类型的元素
# 单链表: 链表的每个元素
要存储值 + 下一个指针的值 这样才能被连接
最后一个元素的的指针为空指针
# 单链表遍历:
从没有指针指向的元素开始
跟着指针走
一直到最后一个数就完成单链表的遍历
创建单链表,实现添加,删除,查找
class Node(object):
def __init__(self, item):
# 节点信息
self.item = item
self.next = None
class Single(object):
def __init__(self):
# 头部
self.__head = None
def is_empty(self):
"""判断单链表是否为空"""
return self.__head == None
def lenght(self):
"""判断单链表的长度"""
if self.is_empty():
return 0
else:
cur = self.__head
count = 0
while cur != None:
cur = cur.next
count += 1
return count
def travel(self):
"""遍历单链表"""
if self.is_empty():
return
else:
cur = self.__head
while cur != None:
print(cur.item)
cur = cur.next
def add(self, item):
"""向单链表头部添加节点"""
node = Node(item)
if self.is_empty():
self.__head = node
else:
node.next = self.__head
self.__head = node
def append(self, item):
"""向单链表尾部添加节点"""
node = Node(item)
if self.is_empty():
self._head = node
else:
cur = self.__head
while cur.next is not None:
cur = cur.next
cur.next = node
def search(self, item):
"""查找单链表中的节点"""
cur = self.__head
while cur != None:
if cur.item == item:
return True
else:
cur = cur.next
return False
def insert(self, pre, item):
"""向单链表指定位置添加节点"""
# s随机位置添加
if pre >= self.lenght():
# 尾部添加
self.append(item)
elif pre <= 0:
self.add(item)
else:
node = Node(item)
count = 0
cur = self.__head
while count < pre-1:
# 指定位置的前两位
count += 1
# 指定位置的前一位
cur = cur.next
# 前一位的next
node.next = cur.next
# 指定位置的next
= 下一位的next
cur.next = node
# 前一位的next = 指定数字
def remove(self, item):
"""删除单链表指定节点"""
# 删除
删除时把指定删除的值
的前一位的next指向下一位的head
if self.is_empty():
return None
else:
cur = self.__head
pre = None
while cur != None:
if cur.item == item:
if cur == self.__head:
self.__head = cur.next
else:
pre.next = cur.next
break
else:
pre = cur
cur = cur.next
return cur
if __name__ == "__main__":
ll = Single()
print(ll.is_empty())
print(ll.lenght())
ll.add(1)
ll.add(2)
ll.add(3)
ll.add(4)
# print(ll.is_empty())
ll.append(5)
ll.append(6)
ll.append(7)
ll.insert(2, 8)
# print("length:",ll.lenght())
# ll.travel()
print(ll.search(3))
print(ll.search(5))
ll.remove(1)
# ll.remove(8)
# ll.remove(7)
# ll.remove(6)
# print ("length:",ll.get_length())
ll.travel()
最后
以上就是留胡子乌龟为你收集整理的双指针问题---链表---单链表的全部内容,希望文章能够帮你解决双指针问题---链表---单链表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复