python每日一题——22反转链表
题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
答案
题目要求反转链表,这是一个常见的链表操作。我们可以定义一个指针,如prev
,用来记录反转前的节点,然后遍历链表,将当前节点的下一个节点指向prev
,最后将prev
更新为当前节点。
链表反转的Python代码实现如下:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
# 定义反转前的节点
prev = None
# 遍历链表
while head:
# 记录当前节点的下一个节点
temp = head.next
# 将当前节点的下一个节点指向反转前的节点
head.next = prev
# 更新反转前的节点为当前节点
prev = head
# 更新当前节点为下一个节点
head = temp
return prev
代码注释:
- 第一行定义了一个链表节点类
ListNode
,包含一个值val
和一个指向下一个节点的指针next
。 - 函数
reverseList
接受一个链表的头节点head
作为参数。 - 第三行定义一个变量
prev
,用来记录反转前的节点。初始化为None
。 - 第五到七行是一个
while
循环,条件是head
非空。 - 第八行记录当前节点的下一个节点,以便后续访问。
- 第九行将当前节点的下一个节点指向反转前的节点,实现反转。
- 第十行将反转前的节点更新为当前节点。
- 第十五行将当前节点更新为下一个节点。
- 循环结束后,返回反转后的链表的头节点,即
prev
。