单链表
class Node(object):
def __init__(self, element):
self.element = element
self.next = None
class SingleLink(object):
def __init__(self):
self.head = None
def is_empty(self):
return self.head == None
def __len__(self):
if self.is_empty():
return 0
else:
cur = self.head
length = 0
while cur != None:
length += 1
cur = cur.next
return length
def trvel(self):
if not self.is_empty():
cur = self.head
while cur.next != None:
print(cur.element, end=',')
cur = cur.next
print(cur.element)
else:
print("空链表")
def append(self, item):
node = Node(item)
if self.is_empty():
self.head = node
else:
cur = self.head
while cur.next != None:
cur = cur.next
cur.next = node
def add(self, item):
node = Node(item)
node.next = self.head
self.head = node
def insert(self, index, item):
if index <= 0:
self.add(item)
elif index >= len(self):
self.append(item)
else:
node = Node(item)
count = 0 # 当前位置
cur = self.head
while count < index - 1:
count += 1
cur = cur.next
node.next = cur.next
cur.next = node
def remove(self, item):
pre = None
cur = self.head
if cur.element == item:
self.head = self.head.next
else:
while cur:
if cur.element != item:
pre = cur
cur = cur.next
else:
pre.next = pre.next.next
break
def search(self, item):
cur = self.head
while cur.next:
if cur.element == item:
return True
else:
return False
if __name__ == '__main__':
link = SingleLink()
print("链表长度: ", len(link))
link.trvel()
link.append(1)
link.append(2)
link.add(3)
link.insert(1, 5)
print("链表长度: ", len(link))
link.trvel()
print("链表是否为空? ", link.is_empty())
print("删除元素'1'")
link.remove(1)
link.trvel()
print('查找元素3',link.search(3))
单向循环链表
class Node(object):
def __init__(self, element):
self.element = element
self.next = None
class SingleCycleLink(object):
def __init__(self):
self.head = None
def is_empty(self):
"""判断链表是否为空"""
return self.head is None
def __len__(self):
if self.is_empty():
return 0
else:
cur = self.head
lenght = 0
while cur.next != self.head:
cur = cur.next
lenght += 1
return lenght + 1
def trvel(self):
"""遍历链表元素"""
if not self.is_empty():
cur = self.head
print(cur.element, end=' ')
while cur.next != self.head:
cur = cur.next
print(cur.element, end=' ')
print()
else:
print('链表为空')
def append(self, item):
"""尾部添加"""
node = Node(item)
if self.is_empty():
self.add(item)
else:
cur = self.head
while cur.next != self.head:
cur = cur.next
cur.next = node
node.next = self.head
def add(self, item):
"""头部添加"""
node = Node(item)
if self.is_empty():
self.head = node
node.next = node
else:
cur = self.head
while cur.next != self.head:
cur = cur.next
node.next = self.head
self.head = node
cur.next = node
def insert(self, index, item):
"""指定位置添加"""
node = Node(item)
if index <= 0:
self.add(item)
elif index > len(self):
self.append(item)
else:
cur = self.head
count = 0
while count < index - 1:
count += 1
cur = cur.next
node.next = cur.next
cur.next = node
if __name__ == '__main__':
link = SingleCycleLink()
link.trvel()
print('长度:', len(link))
link.append(1)
link.append(2)
link.append(3)
link.trvel()
print('长度:', len(link))
link.add(4)
link.trvel()
print('长度:', len(link))
link.insert(2, 5)
link.trvel()
print('长度:', len(link))