下面是一些实例,新建一个单链表,进行插入,查询,删除,反转单链表等操作
# 定义节点
class Node(object):
def __init__(self, value):
self.value = value
self.next = None
# 定义链表
class singleLinkList(object):
def __init__(self, node=None):
self.__head = node
# 头部插入
def add(self, itemList):
for item in itemList:
# 创建结点
node = Node(item)
# 如果是空链表则插入的节点就为头结点
if not self.__head:
self.__head = node
self.__head.next = None
else:
node.next = self.__head
self.__head = node
# 尾部插入
def append(self, itemList):
for item in itemList:
node = Node(item)
curr = self.__head
while curr.next != None:
curr = curr.next
curr.next = node
# 输入链表结果
def travel(self):
cur = self.__head
list = []
while cur != None:
list.append(cur.value)
cur = cur.next
print("链表结果是是{}".format(list))
# 指定位置后面插入节点
def insert(self, index, item):
node = Node(item)
if self.__head == None:
self.__head = node
else:
if (index - 1) == 0:
self.add(item)
else:
cur = self.__head
num = 0
while cur != None:
if not (index - 1) == num:
cur = cur.next
num = num + 1
else:
node.next = cur.next
cur.next = node
break
# 链表反转
def ReverseList(self):
head = self.__head
if head.next == None:
return
pre = None
while head != None:
tmp = head.next
head.next = pre
pre = head
head = tmp
return pre
# 查找指定节点是否存在
def search(self, item):
cur = self.__head
while cur != None:
if cur.value == item:
return True
else:
cur = cur.next
return False
# 删除节点
def remove(self, item):
# 如果移除的是头部,先将头部移除
if self.__head.value == item:
cur = self.__head
while cur != None and cur.next!=None:
# 这边是判断头部节点或者下一个节点值为要删除的元素时处理
if cur.next.value==item or cur.value==item:
if cur == self.__head:
self.__head =cur.next
cur=self.__head
else:
cur.next=cur.next.next
cur=cur.next
else:
cur=cur.next
if __name__ == '__main__':
linkList = singleLinkList()
linkList.add([1, 2, 2,2])
linkList.append([4, 5, 6, 7, 8])
# singleLinkList.insert(2,8)
print(linkList.travel())
print(linkList.search(9))
print(linkList.remove(2))
print(linkList.travel())
# b = linkList.ReverseList()
# reverList=[]
# while b:
# reverList.append(b.value)
# b = b.next
# print("反转后列表是{}".format(reverList))