推荐答案
// www.javascriptcn.com code example
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
prev = None
curr = head
while curr:
next_temp = curr.next
curr.next = prev
prev = curr
curr = next_temp
return prev本题详细解读
问题描述
反转一个单链表。例如,给定链表 1->2->3->4->5,反转后应得到 5->4->3->2->1。
解题思路
反转链表的基本思路是通过遍历链表,逐个改变节点的指向。具体步骤如下:
- 初始化两个指针:
prev和curr。prev初始化为None,curr初始化为链表的头节点head。 - 遍历链表:在遍历过程中,每次将当前节点
curr的next指针指向prev,然后将prev和curr向前移动一步。 - 终止条件:当
curr为None时,遍历结束,此时prev指向新的头节点。 - 返回结果:返回
prev,即反转后的链表头节点。
代码解析
ListNode类定义了链表节点的结构,包含val和next两个属性。reverseList函数实现了链表的反转:prev用于保存当前节点的前一个节点。curr用于遍历链表。next_temp用于临时保存当前节点的下一个节点,以便在改变curr.next后继续遍历。- 在循环中,每次将
curr.next指向prev,然后更新prev和curr的位置。 - 最终返回
prev,即反转后的链表头节点。
时间复杂度
- 时间复杂度为 O(n),其中 n 是链表的长度。因为需要遍历整个链表一次。
- 空间复杂度为 O(1),只使用了常数级别的额外空间。