有一个线性表(a1,a2,…,an),其中n≥2,采用带头结点的单链表L存储,设计一个算法将其就地逆置。代码是什么?
时间: 2024-10-03 17:04:01 浏览: 46
为了就地逆置一个带头结点的单链表,你可以使用迭代或者递归的方法。这里给出的是一个简单的迭代算法,它遍历链表,并交换当前节点与其前驱节点的数据:
```python
# 定义链表节点结构
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_list(head):
prev = None
current = head
while current is not None:
# 保存当前节点的下一个节点
next_temp = current.next
# 将当前节点指向前一个节点
current.next = prev
# 移动prev和current
prev = current
current = next_temp
# 更新新的头节点
return prev
# 使用示例
# 初始化链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
# 逆置链表
reversed_head = reverse_list(head)
```
在这个代码中,`reverse_list`函数返回逆置后的链表头节点。运行此函数后,原来的链表会变成`(3 -> 2 -> 1)`。
阅读全文