class Solution: def reverseList(self, head: ListNode) -> ListNode: if head is None or head.next is None: return head last = None # 前置节点 while head: tmp = head.next # 保存当前节点的下一个节点,不可缺,因为后面更改了当前节点的next指向 head.next = last # 更改当前节点的next为上一个节点 last = head # 将上一个节点移动到当前节点 head = tmp # 当前节点移动到下一个节点 # head.next, last, head = last, head, head.next ,简写样式,提高运行速度 return last
时间: 2023-06-19 13:07:56 浏览: 41
这是一个反转链表的 Python 代码实现,使用了迭代的方式。具体来说,它使用了三个指针:head、last 和 tmp。其中,head 指向当前节点,last 指向前一个节点,tmp 指向下一个节点。在每一次循环中,先将当前节点的 next 指向前一个节点,然后将 last 移动到当前节点,head 移动到下一个节点(即 tmp)。最后返回 last,即反转后的链表的头节点。
相关问题
def ReverseList(self , head: ListNode) -> ListNode:
您好!要实现反转链表的功能,可以使用迭代或递归的方式来实现。以下是使用迭代的方法:
```pythonclass Solution:
def reverseList(self, head: ListNode) -> ListNode:
prev = None
curr = head
while curr:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
return prev
```
这段代码中,我们使用两个指针 `prev` 和 `curr` 分别指向前一个节点和当前节点,然后每次迭代时,我们将当前节点的 `next` 指针指向前一个节点,然后更新 `prev` 和 `curr` 的位置。最后返回 `prev`,即为反转后的链表头节点。
希望能解答您的问题!如果还有其他问题,请随时提出。
链表从链表尾到链表头逆序输出
以下是两种Python实现链表逆序输出的方法:
1. 借助一个新的空链表
```python
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
new_head = None
while head:
temp = head.next
head.next = new_head
new_head = head
head = temp
return new_head
# 测试
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node1.next = node2
node2.next = node3
s = Solution()
new_head = s.reverseList(node1)
while new_head:
print(new_head.val)
new_head = new_head.next
```
2. 在原链表上直接逆序
```python
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
last = None
while head:
temp = head.next
head.next = last
last = head
head = temp
return last
# 测试
node1 = ListNode(1)
node2 = ListNode(2)
node3 = ListNode(3)
node1.next = node2
node2.next = node3
s = Solution()
new_head = s.reverseList(node1)
while new_head:
print(new_head.val)
new_head = new_head.next
```