写一个算法将单链表逆置。要求逆置在原表上进行,不允许重构新表。要求带有注释的程序以及打印逆置值之前的表和逆置之后的表。
时间: 2024-11-27 17:14:45 浏览: 6
```python
# 首先,我们需要定义一个Node类表示单链表节点
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
# 算法核心部分:单链表逆置函数
def reverse_list(head):
# 定义三个指针 prev、curr 和 next,默认它们都指向当前元素
prev = None
curr = head
next_node = None
# 当链表非空时,遍历并更新指针
while curr is not None:
# 将下一个节点保存起来
next_node = curr.next
# 更新当前节点的next指向前一个节点,达到逆序效果
curr.next = prev
# 移动prev和curr到下一个位置
prev = curr
curr = next_node
# 返回新的头节点,即原来的尾节点
return prev
# 示例:创建一个单链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
# 打印原始链表
print("Original List:")
current = head
while current is not None:
print(current.val, end=" -> ")
current = current.next
print("None")
# 逆置链表
reversed_head = reverse_list(head)
# 打印逆置后的链表
print("\nReversed List:")
current = reversed_head
while current is not None:
print(current.val, end=" -> ")
current = current.next
print("None")
```
在这个算法中,我们通过迭代的方式,每次都将当前节点的`next`指向前一个节点,然后移动三个指针前进。最后返回的是原链表的尾部节点,即反转后的头部。
阅读全文