使用python语言实现单链表的判空,长度,遍历,增删改查等功能:
class Node(object):
'''节点'''
def __init__(self,elem):
self.elem=elem
self.next=None
class SingleLinkList(object):
'''单链表'''
def __init__(self,node=None):
'''私有属性(.__)'''
self.__head=node
def is_empty(self):
'''判断链表是否为空'''
return self.__head==None
def length(self):
'''链表长度'''
cur=self.__head
count=0
while cur!=None:
count+=1
cur=cur.next
return count
def travel(self):
'''遍历整个链表并输出每个节点存放的数值'''
cur=self.__head
while cur!=None:
print(cur.elem)
cur=cur.next
def add(self,item):
'''在链表头部添加节点'''
node=Node(item)
node.next=self.__head
self.__head=node
def append(self,item):
'''在链表尾部添加节点'''
node=Node(item)
if self.__head==None:
self.__head=node
else:
cur=self.__head
while cur.next!=None:
cur=cur.next
cur.next=node
def insert(self,position,item):
'''在pos位置处插入节点,pos从1开始,pos-1是其索引下标'''
'''先考虑两个特殊情况'''
pos=position+1
if (pos-1)<1:
self.add(item)
elif pos >self.length():
self.append(item)
else:
count=1
node=Node(item)
cur=self.__head
while count!=(pos-1):
cur=cur.next
count+=1
node.next=cur.next
cur.next=node
def remove(self,item):
'''移除值为item的某个节点'''
'''这里使用了两个游标,实际上用一个游标(.next.next)也可以实现'''
bef_cur=self.__head
cur=bef_cur.next
if cur==None:
if bef_cur.elem==item:
self.__head=None
while cur.elem!=item:
bef_cur=bef_cur.next
cur=cur.next
if cur.next==None:
bef_cur.next=None
else:
bef_cur.next=cur.next
def search(self,item):
'''查找值为item的节点是否存在'''
count=False
cur=self.__head
if cur==None:
return count
while cur!=None:
if cur.elem!=item:
cur=cur.next
if cur==None:
return count
else:
count=True
return count
测试代码:
ll=SingleLinkList()
ll.append(1)
ll.append(8)
ll.append(5)
ll.append(1)
ll.append(5)
ll.append(13)
ll.append(16)
ll.add(8)
print('***************')
print('测试length:')
print(ll.length())
print('***************')
print('测试travel:遍历')
ll.travel()
print('***************')
print('测试insert:在索引下标为2的地方插入999')
ll.insert(2,999)
ll.travel()
print('***************')
print('测试remove:移除999')
ll.remove(999)
ll.travel()
print('***************')
print('测试search:搜索18和5')
print(ll.search(18))
print(ll.search(5))
print('***************')
结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/81ed7db87977d03400be68a8ed4b9f34.png)