单向链表
单向链表也称链表,python没有原生结构与之对应,参考前辈博客做了一版简化实现如下
附前辈博客地址:https://www.cnblogs.com/yupeng/p/3413763.html
class Node(object):
def __init__(self, val, p=0):
self.data = val
self.next = p
class LinkList(object):
# 支持头节点创建及列表创建
def __init__(self, node=0, data=[]):
if not data:
self.head = node
else:
self.head = Node(data[0])
p = self.head
for i in data[1:]:
node = Node(i)
p.next = node
p = p.next
def ptlist(self):
p = self.head
while p.next != 0:
print(p.data, end=' ')
p = p.next
print(p.data)
l = LinkList(data=[1, 2, 3, 4, 5])
l.ptlist() # output:1 2 3 4 5
单向链表倒序
单向链表的反序使用递归结构即可实现,同时由于单向链表结构特殊,需要将链表头作为递归项
def link_reverse(p):
if p.next == 0:
return p
new_head = link_reverse(p.next)
new_tail = new_head
while new_tail.next != 0:
new_tail = new_tail.next
new_tail.next = p
p.next = 0
return new_head
p = link_reverse(l.head)
ll = LinkList(p)
ll.ptlist() # output: 5 4 3 2 1