# 定义结点类
class Node:
def __init__(self,data=0):
self.data = data
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setData(self,newdata):
self.data = newdata
def setNext(self,newnext):
self.next = newnext
class UnorderedList:
def __init__(self):
self.head = Node()
self.tail = Node()
self.head=self.tail
# 整表创建——头插法
def create_head(self,l):
for i in range(len(l)):
self.add_head(l[i])
def add_head(self,data):
tmp = Node(data)
tmp.setNext(self.head)
self.head = tmp
# 整表创建——尾插法
def create_tail(self,l):
for i in range(len(l)):
self.add_tail(l[i])
def add_tail(self,data):
tmp = Node(data)
self.tail.setNext(tmp)
self.tail =tmp
# 寻找元素
def search(self,data):
current = self.head
Found = False
while current != None and not Found:
if current.getData() == data:
Found = True
else:
current = current.getNext()
print("Found:" + str(Found))
# 在任意位置插入元素
def insert(self,n,data):
current = self.head
for i in range(1,n):
current = current.getNext()
tmp = Node(data)
tmp.setNext(current.getNext())
current.setNext(tmp)
# 删除元素
def remove(self,data):
current = self.head
previous = None
Found = False
while current != None and not Found:
if current.getData() == data:
Found = True
else:
previous = current
current = current.getNext()
if Found:
previous.setNext(current.getNext())
del current # 释放空间
else:
print("Remove:Not found!")
# 列表反转 简单理解就是把指向箭头全部反向
def reverse(self):
pre = None # 定义当前节点的前一个元素
while self.head:
nex = self.head.getNext() #定义指定节点的后一个元素
self.head.setNext(pre) #将当前节点的指针指向前一个元素
pre = self.head #依次前移,直至当前节点为空
self.head = nex
# 重新定义一个头结点,并指向反转后的第一个元素
self.head = Node(0)
self.head.setNext(pre)
# 从头结点后的第一个元素开始输出
def display(self):
p = self.head.getNext()
while p:
print(p.getData())
p = p.getNext()
# 测试
if __name__=='__main__':
list1 = UnorderedList()
list1.create_tail([28,3,5,6,12,89,51])
list1.insert(1,35)
list1.remove(52)
list1.remove(89)
list1.search(8)
list1.reverse()
list1.display()
Python 单链表——头插尾插、查询、插入、删除、链表反转操作
最新推荐文章于 2021-10-12 21:14:15 发布