206. 反转链表
题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
思路
- 设置三个指针:
pre
记录反转后链表的头节点;cur
记录未反转链表的头节点;pos
记录未反转链表的下一个节点 - 每次操作的核心节点
cur
是未反转链表的头节点,我们在记录下cur
的下一个节点pos
后,将cur
指向反转后链表的头节点pre
- 然后更新节点数据:令
pre=cur
,cur=pos
,pos=cur.next
- 最后重复操作2
几个需要注意的点:
- 开始时记得初始化节点,反转第一个节点时要让它指向
None
- 对于,只有一个节点,或为空的链表,直接返回它自身
代码
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if head and head.next:
pre = head
cur = head.next
pos = cur.next
pre.next = None
while 1:
cur.next = pre
pre = cur
cur = pos
if not cur:
break
pos = cur.next
return pre
return head