定义
一个典型的单链表:
其中头结点数据域默认为空,也可用于存放单链表长度之类的数据;指针域用来存放第一个结点的地址。最后一个结点的指针域默认为空。
python实现
创建单链表以及在尾端插入一个结点
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束:")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束:")
'''在单链表尾端插入一个数据'''
def InsertElementInTail(self):
cNode = self.head
Element= input("请输入尾端要插入的数据:")
nNode = Node(int(Element))
while cNode.next != None:
cNode = cNode.next
cNode.next = nNode
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.InsertElementInTail()
结果:
在表中首端插入一个结点
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束:")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束:")
'''在表中首端插入某一结点'''
def InsertElementHead(self):
cNode = self.head
Element= input("请输入首端要插入的数据:")
nNode = Node(int(Element))
cNode.next = nNode
nNode.next = cNode.next
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.InsertElementHead()
结果:
获取单链表长度
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束:")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束:")
'''获取链表长度'''
def Getlength(self):
cNode = self.head
length = 0
while cNode.next != None:
length+=1
cNode = cNode.next
return length
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
length = linkedlist.Getlength()
length
结果:
判断单链表是否为空
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束:")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束:")
def Getlength(self):
cNode = self.head
length = 0
while cNode.next != None:
length+=1
cNode = cNode.next
return length
'''判断单链表是否为空'''
def IsEmpty(self):
if self.Getlength() ==0:
return True
else:
return False
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.IsEmpty()
结果:
在表中查找某一指定结点
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束")
def Getlength(self):
cNode = self.head
length = 0
while cNode.next != None:
length+=1
cNode = cNode.next
return length
def IsEmpty(self):
if self.Getlength() ==0:
return True
else:
return False
def FindElement(self):
pos = 0
cNode = self.head
key = int(input('请输入要查找的值:'))
if self.IsEmpty():
print('单链表为空')
return
while cNode.next != None and cNode.data != key:
cNode = cNode.next
pos+=1
if cNode.data == key:
print('查找成功,位置为:',pos)
else:
print('查找失败')
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.FindElement()
结果:
删除表中某一结点
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束")
def Getlength(self):
cNode = self.head
length = 0
while cNode.next != None:
length+=1
cNode = cNode.next
return length
def IsEmpty(self):
if self.Getlength() ==0:
return True
else:
return False
def DeleteElement(self):
if self.IsEmpty():
print('单链表为空')
return
key = int(input('请输入要删除的值:'))
cNode = self.head
pNode = self.head # 当前结点的前一个结点
while cNode.next != None and cNode.data != key:
pNode = cNode
cNode = cNode.next
if cNode.data == key:
pNode.next = cNode.next
del cNode
print('删除成功')
else:
print('删除失败')
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.DeleteElement()
length = linkedlist.Getlength()
print('链表长度为:',length)
结果:
遍历表中所有结点
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束")
def VisitElement(self,vNode):
if vNode!= None:
print(vNode.data,'->',end= ' ')
else:
print('None')
def TraverseElement(self):
cNode = self.head
if cNode.next ==None:
print('单链表为空')
return
print('单链表如下:')
while cNode != None:
cNode = cNode.next # 头结点没有数据
self.VisitElement(cNode)
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.TraverseElement()
结果:
销毁单链表
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束")
def ClearElement(self):
'''销毁单链表'''
self.head = 0
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.ClearElement()
结果:
在表中指定位置插入一个结点
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束")
def VisitElement(self,vNode):
if vNode!= None:
print(vNode.data,'->',end= ' ')
else:
print('None')
def TraverseElement(self):
cNode = self.head
if cNode.next ==None:
print('单链表为空')
return
print('单链表如下:')
while cNode != None:
cNode = cNode.next # 头结点没有数据
self.VisitElement(cNode)
'''输入的位置不是首端,也不是尾端,且有效'''
def InsertElement(self):
index = int(input('请输入要插入的位置:'))
key = int(input("请输入要插入的值:"))
cNode = self.head
pNode = self.head # 前一个结点
pos = 0
while cNode.next != None and pos < index:
pNode = cNode
cNode = cNode.next
pos += 1
if index == pos:
qNode = Node(key)
pNode.next = qNode
qNode.next = cNode
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
linkedlist.InsertElement()
linkedlist.TraverseElement()
结果:
获取表中指定位置的值
class Node:
'''初始化一个节点'''
def __init__(self,data):
self.data = data
self.next = None
class SingleLinkedList:
'''初始化头节点'''
def __init__(self):
self.head = Node(None)
'''创建单链表'''
def CreateSingleLinkedList(self):
cNode = self.head
Element= input("请输入数据按回车键确认,按#结束")
while Element != '#':
nNode = Node(int(Element))
cNode.next = nNode
cNode = cNode.next
Element= input("请输入数据按回车键确认,按#结束")
def GetElement(self):
index = int(input('请输入要插入的位置:'))
cNode = self.head
pos = 0
while cNode.next != None and pos < index:
pNode = cNode
cNode = cNode.next
pos += 1
if index == pos:
return cNode.data
linkedlist = SingleLinkedList()
linkedlist.CreateSingleLinkedList()
result = linkedlist.GetElement()
print(result)
结果:
具体实例可点此链接查看:
https://blog.csdn.net/weixin_40283816/article/details/87551503