单向链表的基本操作实现
- is_empty() 链表是否为空
- length() 链表长度
- travel() 遍历整个链表
- add(item) 链表头部添加元素
- append(item) 链表尾部添加元素
- insert(pos, item) 指定位置添加元素
- remove(item) 删除节点
- search(item) 查找节点是否存在
'''单向链表'''
class singleLinkList(object):
'''定义节点类'''
class Node(object):
def __init__(self, item):
self.elem = item
self.next = None
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, end=" ")
cur = cur.next
def add(self, item):
'''链表头部添加元素,头插法'''
node = Node(item)
node.next = self._head
self._head = node
def append(self, item):
'''链表尾部添加元素,尾插法'''
node = Node(item)
cur = self._head
if self.is_empty():
self._head = node
else:
while cur.next != None:
cur = cur.next
cur.next = node
def insert(self, pos, item):
'''指定位置添加元素'''
if pos <= 0: # 插入到头部
self.add(item)
elif pos >= self.length(): # 插入到尾部
self.append(item)
else: # 插入到中间
node = Node(item)
cur = self._head
count = 0
while cur != None and count < pos-1:
count += 1
cur = cur.next
node.next = cur.next
cur.next = node
def remove(self, item):
'''删除节点'''
cur = self._head
if self.is_empty():
return
elif cur.elem == item:
self._head = cur.next
else:
while cur != None and cur.next.elem != item:
cur = cur.next
cur.next = cur.next.next
def search(self, item):
'''查找节点是否存在'''
cur = self._head
while cur != None:
if cur.elem == item:
return True
cur = cur.next
return False
# 测试
if __name__ == "__main__":
sLink = singleLinkList() # 实例化链表
print(sLink.is_empty())
print(sLink.length())
sLink.travel()
for i in range(1, 6): # 创建一个链表
sLink.add(i)
print(sLink.is_empty())
print(sLink.length())
sLink.travel()
print(' ')
sLink.add(6)
sLink.add(7)
sLink.append(8)
sLink.travel()
print(' ')
sLink.insert(5, 9)
sLink.travel()
print(' ')
sLink.remove(3)
sLink.travel()
print(' ')
print(sLink.search(9))