#链表节点类LinkNode
class LinkNode:
def __init__(self,n):
self.num = n
self.next = None
#链表类Link:
class Link:
def __init__(self):
#初始化链表头结点num为-1,可自行指定,反正也不访问这个头结点的num
self._root = LinkNode(-1)
def append(self,n):
# 在链表末尾追加节点
head = self._root
while head.next:
head = head.next
head.next = LinkNode(n)
def travel(self):
# 遍历链表
head = self._root
while head.next:
head = head.next
print(head.num,end=' ')
print()
def reverse(self):
# 递归地反转链表,这里一定要在一开始指定root的下一个节点
# 也就是正式的反转是要从首个数据节点开始的
node = self._root.next
def start_reverse(node):
#加强只有头结点的场景的判别所以对node也做下判断
if not node or not node.next:
#首次遇到末尾node时,将其指指定为root.next
self._root.next = node
#这里节点其实可以不用返回直接return即可
return node
start_reverse(node.next)
node.next.next = node
node.next = None
# 这里也可以不用返回node直接return即可
return node
start_reverse(node)
#测试append然后遍历:
l1 = Link()
for i in range(10):
l1.append(i)
l1.travel()
遍历输出
0 1 2 3 4 5 6 7 8 9
#测试reverse反转
l1.reverse()
l1.travel()
输出:
9 8 7 6 5 4 3 2 1 0
OK!