鏈表反轉(zhuǎn)遞歸法和循環(huán)法的實現(xiàn):
# 定義節(jié)點(diǎn)
class Node:
def __init__(self, value):
self.data = value
self.next = None
# 鏈表反轉(zhuǎn)
# 1. 循環(huán)法
def reverse(head_node):
next_node = head_node.next
prev_node = head_node
#第一個節(jié)點(diǎn)反轉(zhuǎn)后成為最后一個節(jié)點(diǎn)
prev_node.next = None
while True:
head_node = next_node
next_node = head_node.next
#反轉(zhuǎn)
head_node.next = prev_node
if next_node == None:
break
prev_node = head_node
return head_node
## 2. 遞歸法
def recursive_reverse(reversed_node, new_node):
if new_node == None:
print(reversed_node)
return reversed_node
next_node = new_node.next
new_node.next = reversed_node
return recursive_reverse(new_node, next_node)
if __name__ == '__main__':
# 創(chuàng)建鏈表
head_node = Node(0)
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
head_node.next = node1
node1.next = node2
node2.next = node3
node3.next = node4
# 循環(huán)法
# head_node = reverse(head_node)
# 遞歸法
new_node = head_node.next
head_node.next = None
head_node = recursive_reverse(head_node, new_node)
# 打印反轉(zhuǎn)后的鏈表
while head_node != None:
print(head_node.data)
head_node = head_node.next