单向链表
"""
Date:2019-07-06 16:11
User:LiYu
Email:liyu_5498@163.com
"""
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 is None
def __len__(self):
if self.is_empty():
return 0
else:
cur = self.head
lenght = 0
while cur.next is not None:
cur = cur.next
lenght += 1
return lenght + 1
def trvel(self):
"""遍历链表元素"""
if not self.is_empty():
cur = self.head
while cur.next is not 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 is not 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):
"""指定位置添加"""
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 = SingleLink()
link.trvel()
print('长度:', len(link))
link.append(1)
link.append(2)
link.append(3)
link.add(4)
link.insert(2, 5)
link.trvel()
print('长度:', len(link))
单向循环链表
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))
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190711130204477.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RyZWFtaW5nNTQ5OA==,size_16,color_FFFFFF,t_70)