用双指针实现反转链表
时间: 2024-10-24 08:18:46 浏览: 23
JAVA双向链表反转实现
用双指针(也叫快慢指针)实现链表反转是一个高效的迭代方法。以下是使用Python的一种常见做法:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_list_iterative(head):
prev = None
curr = head
while curr is not None:
# 使用临时变量temp保存下一个节点
temp = curr.next
# 翻转当前节点的next指向上一个节点
curr.next = prev
# 指针向后移动
prev = curr
curr = temp
return prev # 新链表的头节点就是原链表的尾节点
```
代码解释:
1. 初始化两个指针`prev`和`curr`,初始时`prev`为`None`,`curr`指向链表头。
2. 在循环中,首先保存`curr`的下一个节点到`temp`。
3. 将`curr`的`next`指针指向前一个节点`prev`,完成了当前节点的反转。
4. 指针`prev`和`curr`分别向后移动一位,直到`curr`变为`None`(表示已经遍历到链表尾部)。
5. 最后返回`prev`,它现在指向的就是反转后的链表的新头。
阅读全文