不是构造空的链表
头结点的下一个节点指向头结点
node.next = node
is_empty() 链表是否为空
def is_empty(self):
return self.__head is None
length() 链表长度
def length(self):
if self.is_empty():
空链表
return 0
count = 1 # 数目
当前节点
current = self.__head
当前节点的下一个节点不是头结点则继续增加
while current.next != self.__head:
count += 1
当前节点往后移
current = current.next
return count
travel() 遍历整个链表
def travel(self):
访问的当前节点
if self.is_empty():
return False
current = self.__head
print(‘[ ‘, end=’’)
while current.next != self.__head:
print(current.data, end=’ ')
current = current.next
打印最后一个元素
print(current.data, end=’ ')
print(‘]’)
add(item) 链表头部添加元素
def add(self, item):
node = SingleNode(item)
if self.is_empty():
空链表
self.__head = node
node.next = node
else:
非空链表添加
current = self.__head
查找最后一个节点
while current.next != self.__head:
current = current.next
新节点的下一个节点为旧链表的头结点
node.next = self.__head
新链表的头结点为新节点
self.__head = node
最后节点的下一个节点指向新节点
current.next = node
append(item) 链表尾部添加元素
def append(self, item):
node = SingleNode(item)
if self.is_empty():
为空节点时
self.__head = node
node.next = node
else:
让指针指向最后节点
current = self.__head
while current.next != self.__head:
current = current.next
最后节点的下一个为新添加的node
current.next = node
新节点下一个节点指向头结点
node.next = self.__head
insert(index, item) 指定位置(从0开始)添加元素
def insert(self, index, item):
if index <= 0:
在前方插入
self.add(item)
elif index > (self.length() - 1):
在最后添加
self.append(item)
else:
创建新节点
node = SingleNode(item)
遍历次数
count = 0
插入节点位置的上一个节点
prev = self.__head