该题解采用的是经典的迭代方法来反转单链表。首先,创建两个指针:'pre'(初始为None)和'cur'(初始为链表的头节点head)。然后,遍历整个链表。对于每个当前节点'cur',首先保存其下一个节点到临时变量'tmp'(这是为了在断开当前节点时不失去对链表其余部分的访问)。接着,将'cur'的下一个节点指向'pre',实现反向链接。然后,更新'pre'为当前节点'cur',并将'cur'移动到'tmp',即下一个待处理的节点。当'cur'为空时,即已经遍历完整个链表,此时'pre'指向新的头节点,即原链表的最后一个节点,完成反转。
时间复杂度: O(n)
空间复杂度: O(1)
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre = None # 初始化前一个节点为None
cur = head # 初始化当前节点为头节点
while cur: # 当当前节点不为空时循环
tmp = cur.next # 保存当前节点的下一个节点
cur.next = pre # 将当前节点的next指针指向前一个节点
pre = cur # 移动前一个节点到当前节点
cur = tmp # 移动当前节点到下一个节点
return pre # 当循环结束时,pre将是新的头节点,返回pre